搭建Nginx反向代理做内网域名转发

时间:2023-12-30 09:40:56

由于公司内网有多台服务器的 http 服务要映射到公司外网静态 IP,如果用路由的端口映射来做,就只能一台内网服务器的 80 端口映射到外网 80 端口,其他服务器的 80 端口只能映射到外网的非 80 端口。非 80 端口的映射在访问的时候要域名加上端口,比较麻烦。

我们可以在内网搭建一个Nginx反向代理服务器,将Nginx反向代理服务器的80映射到外网IP的80,这样指向到公司外网IP的域名的HTTP请求就会发送到Nginx反向代理服务器,利用Nginx反向代理将不同域名的请求转发到内网不同机器的端口,就起到了根据域名自动转发到相应服务器特定端口的效果。

user www www;
worker_processes ;
error_log logs/error.log;
pid logs/nginx.pid;
worker_rlimit_nofile ;
events {
use epoll;
worker_connections ;
} http {
include mime.types;
default_type application/octet-stream;
include /usr/local/nginx/conf/reverse-proxy.conf;
sendfile on;
keepalive_timeout ;
gzip on;
client_max_body_size 50m;
client_body_buffer_size 256k;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
proxy_connect_timeout 300s; #nginx 跟后端服务器连接超时时间(代理连接超时) proxy_read_timeout 300s; #连接成功后,后端服务器响应时间(代理接收超时) proxy_send_timeout 300s;
proxy_buffer_size 64k; #设置代理服务器(nginx)缓存 proxy_buffers 32k; #proxy_buffers 缓冲区,网页平均在 32k 以下的话,这样设置 proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从 upstream 服务器传递请求,而不缓冲到磁盘
proxy_ignore_client_abort on; #不允许代理端主动关闭连接 server {
listen ;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page /50x.html;
location = /50x.html {
root html;
} server {
listen ;
server_name www.test.com;
access_log logs/test.com_access.log; location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://IP; } }
server {
listen ;
server_name www.ceshi.com;
access_log logs/ceshi.com_access.log;
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://IP;
}
}

要想能记录真实IP,需要修改后端机器的日志格式,假设后端也是一台nginx:在后端配置文件里面加入下面这一段即可:

log_format access '$HTTP_X_REAL_IP - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $HTTP_X_Forwarded_For'; access_log logs/access.log access;

然后重新加载 nginx 配置文件,使之修改生效,再把域名指向公司静态 IP,这样就成功的做到了在浏览器中输入不同域名,指向到内网不同服务器的效果