Nginx代理服务概述
代理的类型
正向代理
私网到公网
反向代理
公网到私网
正向与反向代理的区别
区别在于代理的对象不一样
正向代理的对象是客户端
反向代理的对象是服务端
Nginx反向代理配置语法
1.Nginx代理配置语法
Syntax: proxy_pass URL; Default: — Context: location, if in location, limit_except
2.url跳转修改返回location[不常用]参考URL
Syntax: proxy_redirect default;
proxy_redirect off;
proxy_redirect redirect replacement;
Default:
proxy_redirect default;
Context: http, server, location
3.添加发往后端服务器的请求头信息
Syntax: proxy_set_header field value;
Default:
proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
Context: http, server, location
# 用户请求的时候HOST的值是www.oldboy.com,那么代理服务会像后端传递请求的还是www.oldboy.com proxy_set_header Host $http_host; # 将$remote_addr的值放进变量X-real-IP中,$remote_addr的值为客户端的ip proxy_set_header X-Real-IP $remote_addr; # 客户端通过代理服务访问后端服务,后端服务通过该变量会记录真实客户端地址 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
4.代理到后端的TCP连接、响应、返回等超时时间
//nginx代理与后端服务器连接超时时间(代理连接超时) Syntax: proxy_connect_timeout time; Default: proxy_connect_timeout 60s; Context: http, server, location //nginx代理等待后端服务器的响应时间 Syntax: proxy_read_timeout time; Default: proxy_read_timeout 60s; Context: http, server, location //后端服务器数据回传给nginx代理超时时间 Syntax: proxy_send_timeout time; Default: proxy_send_timeout 60s; Context: http, server, location
5.proxy_buffer代理缓冲区
//nginx会把后端返回的内容先放到缓冲区当中,然后在返回给客户端,边收边传,不是全部接受完再传给客户端 Syntax: proxy_buffering on | off; Default: proxy_buffering on; Context: http, server, location //设置nginx代理保存用户信息的缓存区大小 Syntax: proxy_buffer_size size; Default: proxy_buffer_size 4k|8k; Context: http, server, location //proxy_buffers 缓冲区 Syntax: proxy_buffers number size; Default: proxy_buffers 8 4k|8k; Context: http, server, location
6.Proxy代理网站常用优化配置如下,将配置写入新文件,调用时使用include引用即可
vim /etc/nginx/proxy_params 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 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_buffering on; proxy_buffer_size 32k; proxy_buffers 4 128k;
7.代理配置location时调用,方便后续多个location重复使用
location / { proxy_pass http://127.0.0.1:8080; include proxy_params; }
Nginx反向代理配置场景
1.环境准备 角色 外网IP(NAT) 内网IP(LAN) 主机名 proxy eth0:10.0.1.5 eth1:172.16.1.5 lb01 web01 eth0:10.0.1.7 eth1:172.16.1.7 web01
web01的配置
1)安装nginx 2)创建www.xiao.com虚拟主机配置 vim /etc/nginx/conf.d/www.conf server { listen 172.16.1.7:80; server_name www.xiao.com; location / { root /code/www; index index.html; } } 3)重启服务 systemctl restart nginx
lb01的配置
1)安装nginx 2)创建代理的配置文件 vim web01_www_proxy.conf server { listen 80; server_name www.xiao.com; location / { proxy_pass http://172.16.1.7:80; } } 3)启动服务 systemctl start nginx systemctl enable nginx
改变一:
web01的端口号
1)web01d配置 vim www.conf server { listen 172.16.1.7:8080; server_name www.xiao.com; location / { root /code/www; index index.html; } } systemctl restart nginx 2)1b01代理的配置 vim web01_www_proxy.conf server { listen 80; server_name www.xiao.com; location / { proxy_pass http://172.16.1.7:8080; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
改变二:
web01创建多个虚拟主机
1)web01的配置 增加blog.xiao.com的配置 vim blog.conf server { listen 172.16.1.7:80; server_name blog.xiao.com; location / { root /code/blog; index index.html; } } 2)代理的配置 增加web01_blog_proxy.conf,修改web01_www_proxy.conf vim web01_blog_proxy.conf server { listen 80; server_name blog.xiao.com; location / { proxy_set_header Host $http_host; proxy_pass http://172.16.1.7:80; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } vim web01_www_proxy.conf server { listen 80; server_name www.xiao.com; location / { proxy_set_header Host $http_host; proxy_pass http://172.16.1.7:80; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
排错思路:
反向代理
如果通过代理访问不到web页面,怎么排错:
1.检查web服务器是否能提供服务
1)检查配置文件
server {
listen 81;
server_name www.xiao.com;
location / {
root /code/www;
index index.html;
}
}
2)根据日志判断错误类型
3)网页目录、索引页是否创建,权限
4)服务是否启动
2.检查代理服务器的配置
1)检查配置文件
server {
listen 80;
server_name www.xiao.com;
location / {
proxy_pass http://172.16.1.7:81;
include proxy_params
}
}
2)DNS解析
要求所有web站点的域名解析为代理服务器的IP
总结:
1)前端 代理
2)后端 Web
前端的80端口对应多个后端的80端口
前端的80端口对应不同的后端端口