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代理服务器挂了怎么办_字段

选择情景模式

上网 代理服务器 nginx nginx代理服务器挂了怎么办_字段_02


这样就可以通过代理访问内网服务了

反向代理

对服务端进行代理,客户端不知道服务端具体地址,只要请求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 上网 代理服务器 nginx nginx代理服务器挂了怎么办_字段_03proxy_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,取决于平台。不过,它可以变小。