公司最近有一些反向代理的需求,需要将nginx部署在互联网DMZ区。
之前只有利用nginx做过简单的web服务器,并未真正在生产环境上使用反向代理。
本公司生产环境目前配置如下:
[root@szweb01 conf]# cat
user root;
worker_processes 4;
error_log logs/;
error_log logs/ notice;
error_log logs/ info;
pid logs/;
events {
worker_connections 1024;
}
http {
include ;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/ main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 120;
#gzip on;
server {
listen 7013;
server_name ;
access_log logs/ main;
location / {
proxy_buffering off;
proxy_pass http://10.0.0.1:7023;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 60m;
proxy_read_timeout 600s;
proxy_connect_timeout 30s;
}
#error_page 404 /;
error_page 500 502 503 504 /;
location = / {
root html;
}
}
}
其中要着重说一下几个配置,研究了好几天:
1.error_log
其实error_log分好几个级别,notice、info等,按照日志详细程度来区分的,要想看的全,直接全部打开。
2.proxy_set_header
这个参数估计很多人比较难理解,proxy_set_header是定义请求头,不懂的可以百度 http 请求头,参数意义基本都是一样的。
是nginx向后端被代理服务器转发http请求时,自定义增加的请求头,方便后台被代理服务器了解更多的http请求信息。
一般会有如下的配置。
proxy_set_header Host $host; #定义请求头中host的配置,一般为$host,必要时需要加端口(大多数为内网环境是需要加特定的端口,因为内网访问的时候,会采用ip+端口的访问形式)。而互联网访问时,用户习惯性的直接输入域名,域名默认就是80端口, $host表明客户端请求的主域名值,默认是80端口。
proxy_set_header X-Real-IP $remote_addr; #定义请求头中真实IP地址,方便后端被代理服务器获取真实的IP。
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;