Nginx之代理
前言
因网上对代理的配置项的解释较少或多少有点偏差,故整理一篇笔记,大致介绍Nginx进行代理的相关配置。
常用命令
- nginx -s stop 强制停止服务
- nginx -s quit 请求处理完成后停止服务
- nginx -s reopon 重启服务
- nginx -s reload 重新加载服务
正向代理
类似VPN,服务端不知道客户端的真实地址,客户端请求nginx,由nginx代理访问服务端
例:
server{
listen 8099;
resolver 8.8.8.8;
location / {
proxy_pass http://$http_host$request_uri;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
resolver
DNS解析地址 8.8.8.8(谷歌DNS)
连接方式
浏览器:需要安装谷歌插件SwitchySharp
配置连接
选择情景模式
这样就可以通过代理访问内网服务了
反向代理
对服务端进行代理,客户端不知道服务端具体地址,只要请求nginx,再有nginx进行转发请求
server {
listen 80; #监听的端口号
server_name demo1.lemonfish.com; #监听的域名
location / {
proxy_pass http://127.0.0.1:8086; #真实请求的目标地址
include servers/proxy_params;
}
}
proxy_params:
#proxy_redirect default;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 32k;
proxy_buffering on;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 256k;
以下配置项内容翻译自官网文档:http://nginx.org/en/docs/http/ngx_http_proxy_module.html
proxy_redirect (默认default)
用来设置代理服务器响应头中“Location” 和 “Refresh” 的文本
假定服务器返回了头字段 “Location: http://localhost:8000/two/some/uri/” 配置了指令之后
“proxy_redirect http://localhost:8000/two/ http://frontend/one/;” 那么将会返回 “Location: http://frontend/one/some/uri/”
替换的字符串中服务器的名称可能被忽略 例如:“proxy_redirect http://localhost:8000/two/ /;” 那么将会将主服务器的名称和端口号(除80端口)进行插入。
指定default,将使用location和proxy_pass参数进行替换。例以下两种配置效果是一样的:
location /one/ {
proxy_pass http://upstream:port/two/;
proxy_redirect default;
location /one/ {
proxy_pass http://upstream:port/two/;
proxy_redirect http://upstream:port/two/ /one/;
注:default配置不允许 proxy_pass中使用变量
可以在同一级上指定多条配置
proxy_redirect default;
proxy_redirect http://localhost:8000/ /;
proxy_redirect http://www.example.com/ /;
此外,服务器名称可以与代理服务器的端口一起传递:
proxy_set_header Host proxy_port;
proxy_set_header
允许重新定义或附加字段到传递给代理服务器的请求头。该值可以包含文本、变量及其组合。当且仅当当前级别上没有定义proxy_set_header指令时,这些指令从靠前的配置级别继承。默认情况下,只有两个字段被重定义:
proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
如果启用缓存,则原始请求的头字段“If Modified Since”、“If Unmodified Since”、“If None-Match”、“If-Match”、“Range”和“If-Range”不会传递到代理服务器。
可以像这样传递一个未更改的请求头“Host”:
proxy_set_header Host $http_host;
但是,如果客户端请求头中不存在此字段,则不会传递任何内容。在这种情况下,最好使用$host变量-它的值等于“主机”请求头字段中的服务器名称,或者如果此字段不存在,则等于主服务器名称:
proxy_set_header Host $host;
proxy_connect_timeout (默认60)
定义与代理服务器建立连接的超时。需要注意的是,这个超时通常不能超过75秒。
proxy_read_timeout (默认60)
定义从代理服务器读取响应的超时。超时仅在两个连续的读取操作之间设置,而不是针对整个响应的传输。如果代理服务器在此时间内没有传输任何内容,则连接将关闭。
proxy_send_timeout (默认60)
设置向代理服务器发送请求的超时。超时只在两个连续的写入操作之间设置,而不是针对整个请求的传输。如果代理服务器在此时间内未接收到任何内容,则连接将关闭。
proxy_buffering (默认ON)
启用或禁用来自代理服务器的响应缓冲 ON | OFF
proxy_buffer_size (默认4K | 8K)
设置用于读取从代理服务器接收的响应的第一部分的缓冲区大小。这个部分通常包含一个小的响应头。默认情况下,缓冲区大小等于一个内存页。这可能是4K或8K,取决于平台。不过,它可以变小。