正向代理(forward proxy),一个位于客户端和原始服务器之间的服务器。

在系统运维工作中很难使用到nginx的正向代理,此处忽略正向代理的学习。
反向代理(reverse proxy),一个位于服务端的服务器。

ngx_http_proxy_module
注意:使用的yum的Nginx服务方式实验。
路径:/etc/nginx/conf.d/wangmingqu.conf
地址:192.168.131.129
server {
auth_basic "账号密码登录";
auth_basic_user_file /etc/nginx/conf.d/.passwd;
listen 80;
server_name wang.wangmingqu.com;
charset utf-8;
location / {
root /www/wangmingqu/;
index index.html index.htm;
}
}
测试数据
mkdir -p /www/wangmingqu/
echo "后端提供服务主机" >> /www/wangmingqu/index.html
echo "服务器主机的地址" >> /www/wangmingqu/index.html
路径:/etc/nginx/conf.d/nginx_proxy.conf
地址:192.168.131.130
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://wang.wangmingqu.com:80;
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_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 256k;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
nginx -t
systemctl reload nginx

可以看到最后一个参数显示了客户端的真实IP
192.168.131.130 - wangmingqu [18/Jan/2024:22:00:26 +0800] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" "192.168.131.1"
代理设置:
proxy_pass http://wang.wangmingqu.com:80;
#代理后端web服务器配置;
#语法格式:proxy_pass URL;
#指定要代理的服务端的协议、地址、端口和URL;
#URL设置方式:http://localhost:80/url/、http://127.0.0.1:80/url/
#可配置区域:location
proxy_redirect default;
#修改web服务器返回的响应头中的location头域跟refresh头域数值;
#语法格式:proxy_redirect [default|off;redirect replacement]
#默认配置:proxy_redirect default;即在转发时使用默认端口
#可配置区域:http、server、location
客户端地址设置:
proxy_set_header Host $http_host;
#语法格式:proxy_set_header field value;
#默认设置:proxy_set_header Host $http_host;
#可配置区域:http、server、location
#转发时是否设置http头部
#如果web服务器设置了多个虚拟主机,那么必须配置这一项,如果不配置那么只显示最靠前的站点,按照字母a到z排序。
proxy_set_header X-Real-IP $remote_addr;
#转发时是否添加真实主机的IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#客户端通过代理访问后端服务,后端服务通过该变量获取客户端的真实IP
超时设置:
proxy_connect_timeout 60;
#语法格式:proxy_connect_timeout 超时时间;
#可配置区域:http、server、location
#Nginx代理与后端服务器连接超时时间
#连接超时设置。
proxy_send_timeout 60;
#语法格式:proxy_send_timeout 超时时间;
#可配置区域:http、server、location
#Nginx代理等待后端服务器的响应时间
#发送超时设置。
proxy_read_timeout 60;
#语法格式:proxy_read_timeout 超时时间;
#可配置区域:http、server、location
#后端服务器数据回传给Nginx代理的超时时间
#读取超时设置。
缓存设置:
proxy_buffering on;
#启用缓冲区设置
#可配置区域:http、server、location
proxy_buffer_size 32k;
#设置Nginx代理保存用户头信息的缓冲区大小
#可配置区域:http、server、location
proxy_buffers 4 128k;
#设置缓冲区文件个数及大小
#可配置区域:http、server、location
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 256k;
在代理服务器上开启的缓存,主要用于减少后端服务器的压力。
路径:/etc/nginx/conf.d/wangmingqu.conf
地址:192.168.131.129
server {
listen 80;
server_name wang.wangmingqu.com;
charset utf-8;
location / {
root /www/wangmingqu/;
index index.html index.htm;
}
}
路径:/etc/nginx/conf.d/default.conf
地址:192.168.131.130
#创建缓存存放目录
mkdir -p /www/nginx_proxy_cache/wangmingqu/
proxy_cache_path /www/nginx_proxy_cache/wangmingqu/ levels=1:2 keys_zone=proxy_wang_cache:10m max_size=10g inactive=60m use_temp_path=off;
server {
listen 80;
server_name locathost;
location / {
proxy_pass http://wang.wangmingqu.com:80;
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_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 256k;
proxy_cache proxy_wang_cache;
proxy_cache_valid 200 304 12h;
proxy_cache_valid any 10m;
proxy_cache_key $host$uri$is_args$args;
add_header Nginx-Cache "$upstream_cache_status";
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
}
}
proxy_cache_path /www/nginx_proxy_cache/wangmingqu/ lavels=1:2 keys_zone=proxy_wang_cache:10m max_size=10g inactive=60m use_temp_path=off;
proxy_cache proxy_wang_cache;
proxy_cache_valid 200 304 12h;
proxy_cache_valid any 10m;
proxy_cache_key h o s t host hosturi i s a r g s is_args isargsargs;
add_header Nginx-Cache “$upstream_cache_status”;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
nginx -t
systemctl reload nginx
访问结果

缓存目录
