Nginx 学习笔记 (2) - 反向代理的基本配置暨参数详解
Part II. 基本配置
⚠️ 可以用 vim
编辑文件。按 i 进插入模式,Ctrl + [ 回命令模式,:q 放弃修改,:wq 保存且退出。
1) 编辑配置。Nginx 配置文件的路径,可透过 nginx -t
命令找出;
vim /usr/local/nginx/conf/nginx.conf
2) nginx.conf 的内容相当庞杂,为日后维护方便,建议拆分出 server block,即在 http block 引用外部配置文件;
http {
...
include server.conf;
...
}
3) 以反代 www.example.com 为例,创建并编辑 server.conf。在本例中 $TARGET 填了域名,但 proxy_pass 遇有变量是不会走系统 /etc/hosts
和 /etc/resolv.conf
,而是走 resolver 指定的 DNS 服务器,好处是可以实现域名的动态解析。yourdomain.com 应该换成您自己的主机名。
出于防止跨站攻击和反盗链的目的,对方一般会校验 Referer,不是他们的域名统统返回 403 (另请参阅 反制手段 4 @ Nginx 学习笔记 (5) - 被反代被镜像了怎么办?),作出修改可绕过此限制。至于改不改 Host,Nginx 学习笔记 (a1) - proxy_set_header 的默认值 有更多介绍。
X-Real-IP 用于记录客户端的 IP (但不一定是真实的, 还有正代这个概念),X-Forwarded-For 则反映链路信息,比如经过多少层代理等,虽说以上两字段的伪造相当容易,投票刷票即属一例,毕竟作弊在应用层是难免的。
借由传递客户端的 Set-Cookie,既可反代又不影响注册登录等功能运作,即解决 Cookie 丢失的问题。可能还需要修改 Cookie 的 Domain 属性,摆平跨域的麻烦。
server {
listen 80;
server_name yourdomain.com;
location / {
resolver 8.8.8.8;
set $TARGET 'www.example.com';
proxy_pass http://$TARGET;
# proxy_set_header Host $TARGET;
proxy_set_header Referer http://$TARGET;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header Set-Cookie;
# proxy_cookie_domain www.example.com yourdomain.com;
}
}
4) 先检测配置文件语法的准确性,再动态加载 (热加载) 或重启 Nginx 以查看效果;
nginx -t && (nginx -s reload || service nginx restart)
curl -I yourdomain.com
5) 从外部访问,需要打开 firewalld 防火墙的相应端口。
firewall-cmd --add-service=http --add-service=https --permanent
firewall-cmd --reload