当前位置: 首页 > news >正文

网站关键词库怎么做有什么效果定陶菏泽网站建设

网站关键词库怎么做有什么效果,定陶菏泽网站建设,郴州建设工程集团招聘信息网站,wordpress鼠标特效前言 大家好#xff0c;我是老马。很高兴遇到你。 我们为 java 开发者实现了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何处理的#xff0c;可以参考我的另一个项目#xff1a; 手写从零实现简易版 tomcat minicat 手写 nginx 系列 …前言 大家好我是老马。很高兴遇到你。 我们为 java 开发者实现了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何处理的可以参考我的另一个项目 手写从零实现简易版 tomcat minicat 手写 nginx 系列 如果你对 nginx 原理感兴趣可以阅读 从零手写实现 nginx-01-为什么不能有 java 版本的 nginx? 从零手写实现 nginx-02-nginx 的核心能力 从零手写实现 nginx-03-nginx 基于 Netty 实现 从零手写实现 nginx-04-基于 netty http 出入参优化处理 从零手写实现 nginx-05-MIME类型Multipurpose Internet Mail Extensions多用途互联网邮件扩展类型 从零手写实现 nginx-06-文件夹自动索引 从零手写实现 nginx-07-大文件下载 从零手写实现 nginx-08-范围查询 从零手写实现 nginx-09-文件压缩 从零手写实现 nginx-10-sendfile 零拷贝 从零手写实现 nginx-11-filerange 合并 从零手写实现 nginx-12-keep-alive 连接复用 从零手写实现 nginx-13-nginx.conf 配置文件介绍 从零手写实现 nginx-14-nginx.conf 和 hocon 格式有关系吗 从零手写实现 nginx-15-nginx.conf 如何通过 java 解析处理 从零手写实现 nginx-16-nginx 支持配置多个 server 从零手写实现 nginx-17-nginx 默认配置优化 从零手写实现 nginx-18-nginx 请求头响应头操作 从零手写实现 nginx-19-nginx cors 从零手写实现 nginx-20-nginx 占位符 placeholder 从零手写实现 nginx-21-nginx modules 模块信息概览 从零手写实现 nginx-22-nginx modules 分模块加载优化 从零手写实现 nginx-23-nginx cookie 的操作处理 前言 大家好我是老马。 这一节我们将配置的加载拆分为不同的模块加载处理便于后续拓展。 1. proxy_set_header Cookie 指令 介绍下 nginx proxy_set_header Cookie admin_cookieadmin_value; $http_cookie; 操作 cookie 的指令 在 Nginx 配置文件中proxy_set_header 指令用于设置在代理请求中传递的 HTTP 头部字段。 通过 proxy_set_header 可以在将请求转发给上游服务器时添加、修改或删除请求头部字段。 具体来说proxy_set_header Cookie admin_cookieadmin_value; $http_cookie; 这条指令用于修改请求头中的 Cookie 字段。 它将一个新的 cookieadmin_cookieadmin_value添加到现有的请求 cookie 中。详细解释如下 proxy_set_header 指令这是 Nginx 用来设置请求头部字段的指令。Cookie这是要设置的头部字段名称。在这种情况下设置的是 HTTP 请求的 Cookie 头部。admin_cookieadmin_value; $http_cookie这是要设置的头部字段值。 admin_cookieadmin_value这是要添加的新 cookie 值。admin_cookie 是 cookie 的名称admin_value 是它的值。;分号用来分隔多个 cookie。$http_cookie这是一个 Nginx 的内置变量它包含了当前请求中的所有 cookie 值。 通过这条指令Nginx 会在转发请求到上游服务器之前将一个新的 cookie 添加到现有的 cookie 中。这样上游服务器就会收到一个包含新添加的 admin_cookieadmin_value 的 Cookie 头部。 示例配置片段如下 server {listen 80;server_name example.com;location / {proxy_pass http://backend_server;proxy_set_header Cookie admin_cookieadmin_value; $http_cookie;} } 在这个示例中当客户端向 example.com 发起请求时Nginx 会将请求转发给 backend_server并在请求头部的 Cookie 字段中添加一个新的 admin_cookieadmin_value。 其他相关的 Nginx 指令 proxy_pass用于定义请求转发到的上游服务器。proxy_set_header用于设置转发请求的头部字段。 注意事项 安全性在操作 cookie 时需要注意安全性尤其是涉及敏感信息的 cookie。兼容性确保上游服务器能够正确处理添加的 cookie。配置顺序proxy_set_header 通常放在 location 或 server 块中并在 proxy_pass 指令之前。 通过合理配置 proxy_set_header 指令可以在 Nginx 中灵活地操作 HTTP 请求头部满足各种代理需求。 netty 如何实现 对于 cookie 的新增/修改/删除 这个我们原来就支持了 /*** # 增加或修改请求头* proxy_set_header X-Real-IP $remote_addr;* # 删除请求头* proxy_set_header X-Unwanted-Header ;** param configParam 参数* param context 上下文*/Overridepublic void doBeforeDispatch(NginxCommonConfigParam configParam, NginxRequestDispatchContext context) {ListString values configParam.getValues();// $ 占位符号后续处理String headerName values.get(0);String headerValue values.get(1);FullHttpRequest fullHttpRequest context.getRequest();// 设置HttpHeaders headers fullHttpRequest.headers();if (StringUtil.isEmpty(headerValue)) {headers.remove(headerName);logger.info( doBeforeDispatch headers.remove({}), headerName);} else {// 是否包含if (headers.contains(headerName)) {headers.set(headerName, headerValue);logger.info( doBeforeDispatch headers.set({}, {});, headerName, headerValue);} else {headers.add(headerName, headerValue);logger.info( doBeforeDispatch headers.set({}, {});, headerName, headerValue);}}} proxy_cookie_domain 指令 解释 proxy_cookie_domain 是 Nginx 的一个指令用于修改代理服务器响应中的 Set-Cookie 头部的 Domain 属性。 这个指令通常用于在反向代理配置中当上游服务器设置的 Domain 属性与客户端访问的域名不一致时通过重写 Domain 属性来解决跨域问题。 语法 proxy_cookie_domain [上游服务器的域名] [要重写为的域名]; 上游服务器的域名指定要匹配并重写的 Domain 属性值。要重写为的域名指定新的 Domain 属性值。 默认值 proxy_cookie_domain off; 如果不设置 proxy_cookie_domain则默认不对 Set-Cookie 头部的 Domain 属性进行任何修改。 配置范围 该指令可以在 http、server 或 location 块中配置。 示例 假设我们有一个后端服务器 backend.example.com它在设置 Cookie 时将 Domain 属性设为 backend.example.com。 但是客户端访问的是 www.example.com。 我们可以使用 proxy_cookie_domain 来重写 Domain 属性以便客户端能够正确地接收和发送这些 Cookie。 http {server {listen 80;server_name www.example.com;location / {proxy_pass http://backend.example.com;proxy_cookie_domain backend.example.com www.example.com;}} } 在这个配置中当上游服务器 backend.example.com 在响应中返回 Set-Cookie 头部时 Set-Cookie: sessionidabcd1234; Domainbackend.example.com; Path/ Nginx 会将其重写为 Set-Cookie: sessionidabcd1234; Domainwww.example.com; Path/ 使用场景 跨域 Cookie 共享当后端服务器和客户端使用不同的域名时通过 proxy_cookie_domain 重写 Set-Cookie 头部的 Domain 属性使 Cookie 能够在客户端域名下有效。域名变更如果网站的域名发生变化通过该指令可以确保旧域名设置的 Cookie 仍然有效。子域名问题在使用子域名时可以通过该指令将所有子域名的 Cookie 统一到主域名下。 注意事项 安全性确保重写的域名是可信任的以防止 Cookie 被不当共享。精确匹配proxy_cookie_domain 的匹配是精确匹配的因此需要确保指定的上游服务器域名与实际的 Set-Cookie 头部中的 Domain 属性完全一致。 通过合理使用 proxy_cookie_domain 指令可以有效地解决跨域 Cookie 共享的问题确保在反向代理场景下的 Cookie 设置和使用正确无误。 如何通过 netty实现 proxy_cookie_domain 指令特性 核心实现如下 /*** 参数处理类 响应头处理** since 0.20.0* author 老马啸西风*/ public class NginxParamHandleProxyCookieDomain extends AbstractNginxParamLifecycleWrite {private static final Log logger LogFactory.getLog(NginxParamHandleProxyCookieDomain.class);Overridepublic void doBeforeWrite(NginxCommonConfigParam configParam, ChannelHandlerContext ctx, Object object, NginxRequestDispatchContext context) {if(!(object instanceof HttpResponse)) {return;}ListString values configParam.getValues();if(CollectionUtil.isEmpty(values) || values.size() 2) {return;}// 原始String upstreamDomain values.get(0);// 目标String targetDomain values.get(1);HttpResponse response (HttpResponse) object;HttpHeaders headers response.headers();String setCookieHeader headers.get(HttpHeaderNames.SET_COOKIE);if (setCookieHeader ! null) {SetCookie cookies ServerCookieDecoder.STRICT.decode(setCookieHeader);SetCookie modifiedCookies cookies.stream().map(cookie - {if (upstreamDomain.equals(cookie.domain())) {Cookie newCookie new DefaultCookie(cookie.name(), cookie.value());newCookie.setDomain(targetDomain);newCookie.setPath(cookie.path());newCookie.setMaxAge(cookie.maxAge());newCookie.setSecure(cookie.isSecure());newCookie.setHttpOnly(cookie.isHttpOnly());return newCookie;}return cookie;}).collect(Collectors.toSet());ListString encodedCookies ServerCookieEncoder.STRICT.encode(modifiedCookies);headers.set(HttpHeaderNames.SET_COOKIE, encodedCookies);}logger.info( doBeforeWrite proxy_hide_header upstreamDomain{} targetDomain{}, upstreamDomain, targetDomain);}Overridepublic void doAfterWrite(NginxCommonConfigParam configParam, ChannelHandlerContext ctx, Object object, NginxRequestDispatchContext context) {}Overrideprotected String getKey(NginxCommonConfigParam configParam, ChannelHandlerContext ctx, Object object, NginxRequestDispatchContext context) {return proxy_hide_header;}} proxy_cookie_flags 指令 支持哪些 在 Nginx 中proxy_cookie_flags 指令用于设置从代理服务器返回给客户端的 Set-Cookie 头中特定 cookie 的属性标志。主要支持的配置选项包括 HttpOnly将 HttpOnly 标志添加到 cookie使得 JavaScript 无法通过 document.cookie 访问该 cookie。 proxy_cookie_flags cookie_name HttpOnly; Secure将 Secure 标志添加到 cookie仅在通过 HTTPS 协议发送时才会发送该 cookie。 proxy_cookie_flags cookie_name Secure; SameSite设置 SameSite 标志限制浏览器仅在同站点请求时发送该 cookie有助于防止跨站点请求伪造CSRF攻击。 proxy_cookie_flags cookie_name SameSiteStrict; 支持的 SameSite 值包括 Strict、Lax 和 None。 Max-Age设置 Max-Age 属性指定 cookie 的过期时间秒。通常用于设置持久化 cookie 的过期时间。 proxy_cookie_flags cookie_name Max-Age3600; Expires设置 Expires 属性指定 cookie 的过期时间点。通常以 GMT 格式的日期字符串指定。 proxy_cookie_flags cookie_name ExpiresWed, 21 Oct 2026 07:28:00 GMT; Domain设置 Domain 属性指定可接受该 cookie 的域名范围。通过 proxy_cookie_domain 指令更常用地配置。 proxy_cookie_flags cookie_name Domainexample.com; Path设置 Path 属性指定该 cookie 的路径范围。 proxy_cookie_flags cookie_name Path/; 示例 以下是一些示例展示如何使用 proxy_cookie_flags 指令设置不同的 cookie 标志 server {listen 80;server_name example.com;location / {# 添加 HttpOnly 和 Secure 标志proxy_cookie_flags session_cookie HttpOnly Secure;# 设置 SameSite 标志为 Strictproxy_cookie_flags mycookie SameSiteStrict;# 设置 Max-Age 为 1 小时proxy_cookie_flags persistent_cookie Max-Age3600;# 设置 Expires 属性proxy_cookie_flags old_cookie ExpiresWed, 21 Oct 2026 07:28:00 GMT;# 设置 Domain 属性proxy_cookie_flags global_cookie Domainexample.com;# 设置 Path 属性proxy_cookie_flags local_cookie Path/subpath;proxy_pass http://backend;} } 通过这些配置您可以灵活地控制从代理服务器返回的 Set-Cookie 头中各个 cookie 的属性以满足安全需求和业务逻辑。 java 核心实现 public void doBeforeWrite(NginxCommonConfigParam configParam, ChannelHandlerContext ctx, Object object, NginxRequestDispatchContext context) {if(!(object instanceof HttpResponse)) {return;}ListString values configParam.getValues();if(CollectionUtil.isEmpty(values) || values.size() 2) {return;}HttpResponse response (HttpResponse) object;HttpHeaders headers response.headers();String cookieHeader headers.get(HttpHeaderNames.COOKIE);final String cookieName values.get(0);if (cookieHeader ! null) {SetCookie cookies ServerCookieDecoder.STRICT.decode(cookieHeader);SetCookie modifiedCookies cookies.stream().map(cookie - {// 相同的名字if (cookieName.equals(cookie.name())) {// HttpOnly Securefor(int i 1; i values.size(); i) {String value values.get(i);if(HttpOnly.equals(value)) {cookie.setHttpOnly(true);}if(Secure.equals(value)) {cookie.setSecure(true);}// 拆分if(!value.contains()) {return cookie;}String[] items value.split();String itemKey items[0];String itemVal items[1];// if(SameSite.equals(itemKey) Strict.equals(itemVal)) { // }if(Max-Age.equals(itemKey)) {cookie.setMaxAge(Long.parseLong(itemVal));}if(Expires.equals(itemKey)) {Date expireDate calcDate(itemVal);long maxAge expireDate.getTime() - System.currentTimeMillis();cookie.setMaxAge(maxAge);}if(Domain.equals(itemKey)) {cookie.setDomain(itemVal);}if(Path.equals(itemKey)) {cookie.setPath(itemVal);}}}return cookie;}).collect(Collectors.toSet());ListString encodedCookies ServerCookieEncoder.STRICT.encode(modifiedCookies);headers.set(HttpHeaderNames.COOKIE, encodedCookies);}logger.info( doBeforeWrite proxy_cookie_flags values{}, values);} nginx proxy_cookie_path 指令 介绍 在 Nginx 中proxy_cookie_path 指令用于修改传递到后端服务器的 HTTP 请求中的 Cookie 的路径。 这个指令通常在反向代理服务器配置中使用用于调整传递给后端服务器的 Cookie 的路径信息以适应后端服务器的预期路径结构。 语法和用法 语法 proxy_cookie_path regex path; 参数解释 regex一个正则表达式用于匹配要修改的 Cookie 的路径。path要替换成的路径。 示例 假设有如下配置 location /app/ {proxy_pass http://backend.example.com;proxy_cookie_path ~*^/app(.*) $1; } 在这个示例中 proxy_cookie_path 指令配合 proxy_pass 使用表示将从客户端接收的带有路径 /app/ 的 Cookie 的路径信息去除 /app 部分后再传递给后端服务器。 例如如果客户端发送的 Cookie 路径是 /app/session, Nginx 将修改为 /session 后传递给后端服务器。 注意事项 使用 proxy_cookie_path 时确保理解你的后端服务器期望接收的 Cookie 路径格式以便正确设置正则表达式和路径。正则表达式必须能够正确匹配客户端发送的 Cookie 路径。这个指令通常用于调整不同路径的代理请求以便与后端服务器的预期路径结构匹配。 java 核心实现 public void doBeforeDispatch(NginxCommonConfigParam configParam, NginxRequestDispatchContext context) {ListString values configParam.getValues();if(CollectionUtil.isEmpty(values) || values.size() 2) {throw new Nginx4jException(proxy_cookie_path 必须包含2个参数);}FullHttpRequest request context.getRequest();// 原始String regex values.get(0);String path values.get(1);HttpHeaders headers request.headers();String cookieHeader headers.get(HttpHeaderNames.COOKIE);if (cookieHeader ! null) {String modifiedCookieHeader cookieHeader.replaceAll(regex, path);headers.set(HttpHeaderNames.COOKIE, modifiedCookieHeader);}logger.info( doBeforeDispatch proxy_cookie_path replace regex{} path{}, regex, path); } 小结 对于 cookie 的处理让我们的请求可以更加强大灵活。 proxy_cookie_domain: 设置后端服务器响应的 Cookie 中的域名。 proxy_cookie_flags: 设置后端服务器响应的 Cookie 的标志位。 proxy_cookie_path: 设置后端服务器响应的 Cookie 的路径。 我是老马期待与你的下次重逢。 开源地址 为了便于大家学习已经将 nginx 开源 https://github.com/houbb/nginx4j
http://www.tj-hxxt.cn/news/217693.html

相关文章:

  • asp网站仿制南京快速建站模板下载
  • 网上做调查问卷赚钱的网站中国建设银行信用卡积分兑换网站
  • 建设网站一般过程网站模版如何使用
  • 微信导航网站怎么做前端菜鸟教程
  • 电商网站开发的流程图两网站会员同步
  • 网站策划书的撰写流程wordpress菜单.html
  • 一级a做爰片免费网站国语版的我做网站了 圆通
  • 网站设计师英文wordpress主题 榆次
  • 可以免费创建网站的软件北京免费网站建设
  • 网站做百度排名教程上海网站建设技术
  • 做网站建设涉及哪些算法全网营销外包全网天下
  • 个人网站如何被百度收录临沂森拓网络科技有限公司
  • 有网站的源代码怎么生成网站顶呱呱网站做的怎么样
  • p2p网站开发思路方案wordpress xml地图
  • 运河网站制作微信分销系统价格
  • 渭南建网站备案个人网站名称大全
  • 台州网站建设解决方案微信公众号开发平台
  • 品牌型网站建设理论深圳华南城网站建设
  • 网站建设的科目哈尔滨关键词优化效果
  • 网站备案查询 怎么弄世界杯韩国出线了吗
  • 政务公开和网站建设情况总结wordpress 会员聊天
  • 杭州做代发的网站有哪些wordpress运行目录
  • 好看的公司网站深圳宝安网站建设学习网
  • 网站可以做无形资产吗wordpress分享文章插件
  • 网站建设书店目标客户分析珠海编程培训机构
  • 提高网站关键词排名上海工装设计公司排名
  • 免费商城网站建站系统建设跳转公积金网站
  • 求网站建设的视频教程南京中企动力有限公司
  • 网站建设的现状和未来专门做美食的网站6
  • 网站的一般制作流程html电影网站模板下载