代理的基本概述
Nginx代理服务常见模式
Nginx作为代理服务,按照应用场景模式进行总结,代理可分为正向代理和反向代理。
反向代理,用于公司集群架构中,客户端====》代理《 ==== 》服务端
正向代理与反向代理的差别:
区别在于形式上服务的"对象"不一样
正向代理代理的对象是客户端,为客户端服务
反向代理代理的对象是服务端,为服务端服务
Nginx代理服务支持协议
反向代理模式 Nginx配置模块
http、websocket、https ngx_http_proxy_module
fastcgi ngx_http_fastcgi_module
uwsgi ngx_http_uwsgi_module
grpc ngx-http_v2_module
Nginx反向代理配置实践
环境准备
角色 外网IP(NAT) 内网IP(NAT) 主机名
Proxy eth0:192.168.15.5 eth1:172.16.1.5 lb01
web01 eth0:192.168.15.7 eth1:172.16.1.7 web01
1. 修改配置文件
vim /etc/nginx/conf.d/web.nana.com.conf
server {
listen 80;
server_name web.nana.com;
root /web;
location / {
index index.php index.html;
}
}
2. 创建配置文件指定的目录文件
mkdir /web
echo "web01..." > /web/index.html
3. 启动Nginx服务
systemctl restart nginx
1. 安装yum包
yum -y install nginx
2. 修改配置文件
vim /etc/nginx/conf.d/proxy_web.conf
server {
listen 80;
server_name web.nana.com;
location / {
proxy_pass http://192.168.15.7:80;
# 用户请求web.nana.com网站,代理服务器会把请求转交给192.168.15.7服务器的80端口
}
}
3. 重启nginx
systemctl start nginx
在本机添加域名解析
C:\Windows\System32\drivers\etc
在hosts文件添加域名解析
192.168.15.7 zh.nana.com blog.nana.com
192.168.15.5 web.nana.com
我们先打开本机的cmd,输入ping web.nana.com。
查看一下域名解析的ip地址是不是web02的ip地址(192.168.15.5)。
打开浏览器,输入web.nana.com。我们会发现,浏览器输出的结果为web01服务器blog.nana.com网站的内容。
为什么我们通过浏览器访问web.nana.com
网站的内容,代理服务器返回给浏览器的内容是blog.nana.com
的网站内容呢?
/etc/nginx/conf.d
目录下的文件,查看目录下文件的排列顺序,如下所示:blog.nana.com.conf
、default.conf
、 web.nana.com.conf
、 zh.nana.com.conf
。/etc/nginx/conf.d
目录下,最靠前的blog.nana.com.conf
结果返回给浏览器。- lb01代理服务器
vim /etc/nginx/conf.d/proxy_web.conf
server {
listen 80; # 代理服务器监听浏览器端口号不需要改动
...
proxy_pass http://192.168.15.7:8080;
...
}
systemctl restart nginx
- web01服务器
vim /etc/nginx/conf.d/
server {
listen 8080;
...
}
systemctl restart nginx
web.nana.com
。- lb01代理服务器
vim /etc/nginx/conf.d/proxy_web.conf
server {
listen 80;
server_name web.nana.com;
location / {
proxy_pass http://192.168.15.7:80;
proxy_set_header Host $http_host;
# 代理服务器匹配请求web01服务器的时候,默认加上Host头信息(域名)
}
}
systemctl restart nginx
Nginx反向代理相关参数
- lb01代理服务器
vim /etc/nginx/conf.d/proxy_web.conf
server {
listen 80;
server_name web.nana.com;
location / {
proxy_pass http://192.168.15.7:80;
proxy_set_header Host $http_host;
# 代理服务器匹配请求web01服务器的时候,默认加上Host头信息(域名)
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 追加客户端ip地址以及全链路ip地址到web服务器记录日志
# 默认情况下,Web节点服务器日志只记录了Nginx代理的IP地址。
proxy_http_version 1.1;
# 修改Nginx代理到Web节点服务器使用长连接(http1.1版本协议)
# proxy_set_header X-Real-IP $remote_addr; 可加可不加参数,多层代理的情况下只记录最近一次的代理IP地址。
# 使用该参数,需要手动在主配置文件/etc/nginx/nginx.conf中的http层添加日志参数"$http_x_real_ip"。
}
location /favicon.ico {
return 200; # 忽略网页小图标加载,关闭日志记录
access_log off;
}
}
systemctl restart nginx
Nginx反向代理其他相关参数
- Nginx反向代理时间相关参数(默认都是60秒)
proxy_connect_timeout 60s; nginx代理与后端服务器连接超时时间(代理连接超时)
proxy_read_timeout 60s; nginx代理等待后端服务器的响应时间(代理响应超时)
proxy_send_timeout 60s; 后端服务器数据回传给nginx代理超时时间(回传数据给代理超时)
- Nginx代理缓冲区
proxy_buffering on(/off); nginx会把后端返回的内容先放到缓冲区中,然后再返回给客户端,边收边传,不是全部接收再传给客户端
proxy_buffers_size 4k; 设置nginx代理保存用户头信息的缓存区大小
proxy_buffers 8 8k; 设置nginx代理缓冲区大小(8*8 = 64k)
Nginx反向代理常用优化配置
/etc/nginx/proxy_params
,调用时使用include
引用即可。1. 创建常用的代理参数优化配置文件
vim /etc/nginx/proxy_params
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_connect_timeout 30s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
2. 修改Nginx反向代理的配置文件
vim /etc/nginx/conf.d/proxy_web.conf
server {
listen 80;
server_name web.nana.com;
location / {
proxy_pass http://172.16.1.7:80; # 生产环境中,nginx代理和web服务器在同一个局域网
include proxy_params; # 调用代理参数优化配置文件
}
}
systemctl restart nginx
Nginx反向代理的局限性 : 一个location仅能代理一台后端主机!!!