Nginx 反向代理的指令不需要新增额外的模块,默认自带 proxy_pass 指令,只需要修改配置文件就可以实现反向代理。
反向代理可以隐藏服务器信息,保证内网的安全,通常将反向代理作为公网访问地址,web 服务器是内网,即通过 nginx 配置外网访问 web 服务器内网。
proxy_redirect off;
说明
重写后端服务器的 location 和 refresh 头。
proxy_set_header
指令
proxy_set_header Host $host;
说明
重写发送给后端服务器的请求头内容。
proxy_connect_timeout
指令
proxy_connect_timeout 300;
说明
代理服务器接收请求到连接后端服务器的最长等待时间。
proxy_buffer_size
语法
proxy_buffer_size 4k;
说明
后端响应的缓冲区数量和大小。
proxy_buffers
语法
proxy_buffers 4 32k;
说明
请求后端的缓冲区数量和大小。
proxy_busy_buffers_size
语法
proxy_busy_buffers_size 64k;
说明
当代理服务器忙时,缓冲区的最大值。
proxy_send_timeout
语法
proxy_send_timeout 300
说明
将超时与请求传输到代理服务器分配。
proxy_read_timeout
语法
proxy_read_timeout 300
说明
NGINX 等待获取请求响应的时间。
Nginx反向代理案例
简单配置
server { listen 80; server_name m.haicoder.net;# 服务器地址或绑定域名 location / { # 访问80端口后的所有路径都转发到 proxy_pass 配置的ip中 proxy_pass http://192.168.98.80:8081; # 配置反向代理的ip地址和端口号 【注:url地址需加上http:// 或 https://】 root html; index index.html index.htm; }}
当访问到该
m.haicoder.net
时,直接转发到http://192.168.98.80:8081
。完整配置
location / { proxy_pass http://apachephp; #Proxy Settings proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_max_temp_file_size 0; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; }
案例
我们首先,使用 Linux 的 cp 命令,将 nginx 的配置文件 nginx.conf 拷贝一份,拷贝为 nginx.8081.conf,具体命令如下:
cp /etc/nginx/nginx.conf /etc/nginx/nginx.8081.conf
拷贝完成,如下图所示:
我们再次,将 default.conf 拷贝一份,具体命令如下:
cp -rf /etc/nginx/conf.d/ /etc/nginx/conf.8081.d
拷贝完成后,如下图所示:
现在,我们使用 vim 修改
/etc/nginx/nginx.8081.conf
配置,修改为如下:include /etc/nginx/conf.8081.d/*.conf;
修改 include 指令,修改完毕后,如下图所示:
现在,我们再次打开 8081 下的配置,命令如下:
vim /etc/nginx/conf.8081.d/default.conf
我们修改监听的端口为 8081,修改完毕后,配置如下:
同时,我们在
/usr/share/nginx8081/html
路径下新建一个 index.html,现在,我们再次打开默认的 default.conf 配置,具体命令如下:vim /etc/nginx/conf.d/default.conf
修改如下:
现在,我们启动 8081 的 nginx,具体命令如下:
nginx -c /etc/nginx/nginx.8081.conf
我们再次,启动 80 的 nginx,具体命令如下: