成功案例网站建设,北京 网站空间 租用,品牌网站设计网站,divi wordpress主题目的
Nginx和前端后端的关系都是密不可分的#xff0c;但是它的配置又是很多的#xff0c;我们有一些不常用的#xff0c;所以我们要总结下来#xff0c;这里我们提供一个样例#xff0c;每次有新的配置#xff0c;就先修改样例#xff0c;让我们有迹可循#xff0c;看…目的
Nginx和前端后端的关系都是密不可分的但是它的配置又是很多的我们有一些不常用的所以我们要总结下来这里我们提供一个样例每次有新的配置就先修改样例让我们有迹可循看着样例实地举例才可。
样例
http{server {listen 80;upstrem mgr{ip:port;}location / {proxy_pass http://mgr;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection upgrade;proxy_http_version 1.1;proxy_redirect off;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
}proxy_pass http://bsfitgateway-credit表示将请求反向代理传递给 http://bsfitgateway-credit这个后端服务器 proxy_set_header Upgrade $http_upgrade表示如果是upgrade的请求下方有解释如WebSocket,就将Upgrade头传递给后端服务器 proxy_set_header Connection “upgrade” 同样表示将Connection头传递给后端服务器 proxy_http_version 1.1 指定使用HTTP/1.1协议与后端服务器通信 proxy_redirect off表示不需要重写Location和Refresh响应头。详细解释看下面 proxy_set_header X-Real-IP $remote_addr将客户端真实IP传递给后端服务器存入X-Real-IP头 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for将客户端IP加入X-Forwarded-For头并传递给后端服务器
其中$remote_addr和$proxy_add_x_forwarded_for是Nginx的系统变量,分别表示客户端IP和记录了所有经过的客户端IP的X-Forwarded-For头值。
常见的Nginx系统变量还有:
参数名含义$remote_addr客户端IP$proxy_add_x_forwarded_for记录了所有经过的客户端IP的X-Forwarded-For头值。 下方详解$http_upgrade表示请求是否为upgrade类型如WebSocket$upstream_addr后端服务器的IP地址和端口 $upstream_status后端服务器返回的状态码$request_method客户端请求方法,如GET、POST$remote_port客户端端口$remote_user客户端用户名,如果有进行认证$scheme请求使用的协议,如http或https$request_uri客户端原始请求的完整URI$query_string请求中的参数字符串$host请求头中的Host值$server_port处理请求的服务器端口号$server_name服务器名称即nginx.conf中的server_name指令配置的值$request_filename请求中的文件名,不带请求URI$document_root与请求对应的根目录$request_body请求的主体内容(body) $content_type响应的Content-Type头字段值$args请求中的参数,等同于$query_string$content_length响应的Content-Length头字段值$tcpinfo_rttTCP连接的往返时延$pid工作进程的PID$msec当前时间,单位为秒毫秒 $time_iso8601以ISO8601标准格式的当前时间$nginx_versionnginx版本号 $ssl_protocol如果为HTTPS加密协议如TLSv1$ssl_cipher如果为HTTPS,加密算法如AES128
这些变量都可以获取各种请求、响应、服务器上下文信息,用于实现Nginx配置功能。
proxy_add_x_forwarded_for
在Nginx中,$proxy_add_x_forwarded_for是一个系统变量,它表示请求头中X-Forwarded-For字段的值。
X-Forwarded-For请求头用来表示代理或者负载均衡后面的客户端原始IP地址。
当请求通过多个代理或者负载均衡服务器时,每个服务器都会将自己收到的来源IP地址添加到X-Forwarded-For头信息中,格式如下:
X-Forwarded-For: client_ip, proxy_1_ip, proxy_2_ip
Nginx upstream模块会自动将来自客户端的IP地址追加到X-Forwarded-For头中。
$proxy_add_x_forwarded_for变量的值就是这个完整的X-Forwarded-For头字段的值。
remote_addr 和 proxy_add_x_forwarded_for的区别
$remote_addr只包含客户端与Nginx直接建立连接时的IP,而不是经过代理或负载均衡后的IP。
区别是:
$remote_addr - 直接连接的客户端IP$proxy_add_x_forwarded_for - 通过代理或负载均衡后的原始客户端IP
如果没有使用代理或负载均衡$remote_addr 和 $proxy_add_x_forwarded_for返回相同的值。
如果使用了代理或负载均衡$proxy_add_x_forwarded_for包含原始客户端IP而$remote_addr只包含代理服务器的IP。
$remote_addr通常用于访问控制、日志、统计等需要客户端真实IP的场景。也可以与proxy_set_header配合传递给上游服务器。 所以简单来说: $remote_addr代表直接连接客户端的IP地址$proxy_add_x_forwarded_for代表经过代理后的原始客户端IP地址。
upgrade 请求说明
upgrade请求是指客户端或服务器试图将与HTTP不同的其他协议用于通信的请求。
其中最常见的就是WebSocket(Web套接字)。WebSocket使用HTTP进行初始握手,但之后升级为WebSocket协议用于长连接的双向通信。
具体来说,upgrade请求必须发送Upgrade头字段表示要升级协议,并在Connection头字段中包含upgrade表示这是一个升级请求。
例如: GET /chat HTTP/1.1 Host: example.com Upgrade: websocket Connection: Upgrade 服务器如果同意升级,会返回: HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade 之后通信就会切换到WebSocket协议。
除了WebSocket,upgrade还可以用于升级到其他应用层协议,如实现流媒体传输等。需要客户端和服务器都支持该协议。
在Nginx中proxy_set_header Upgrade和proxy_set_header Connection upgrade用于将upgrade请求透传给后端服务器,以实现协议的升级。
proxy_redirect 详解
proxy_redirect指令用于修改后端服务器响应中的Location、Refresh等重定向头字段。
当Nginx进行反向代理时后端服务器返回的重定向LOCATION可能是后端服务器的内部地址,而非可访问的外部地址。proxy_redirect可以重写这些地址,使重定向到外部可访问的地址。
例如: 上游服务器返回的LOCATION: http://internal.example.com/path 这是后端服务器的地址 可以用proxy_redirect重写为: proxy_redirect http://internal.example.com/ http://external.example.com/ 后者是外部可以访问的地址 那么LOCATION会被重写为http://external.example.com/path 这样就可以将后端服务器返回的内部域名 重定向到外部可访问域名上。
proxy_redirect 默认为off,表示不重写。
可以通过正则表达式进行复杂重写:
proxy_redirect ~^(http://[^:]):\d(/.*)$ $1$2;
这个例子表示去掉内部重定向URL中的端口号。
proxy_redirect也可以设置为默认参数,表示重写为nginx.conf中设置的代理传递的服务器名称:
proxy_redirect default;
如果代理传递的是http://example.com,那么重定向会直接改写为这个域名。
注意
注意的是proxy_redirect只会修改重定向的头部,而不会修改内容中的URL。
主要应用场景
后端服务器内部使用私有域名,需要重定向到公网域名部署时后端服务器域名变更,但不方便修改后端配置需要将流量引导到外部特定域名后端服务器域名不稳定,需要灵活调整