nginx反向代理内外网跳转
一个域名(www.abc.com),指向了公司的外网IP(59.108.xx.xx),
公司的外网IP(59.108.xx.xx),映射到一台内网服务器37(172.16.2.37),以下简称37服务器。
另一台内网服务器38是资源服务器(172.16.2.38),上传了很多的图片,以下简称38服务器。
其中,
37服务器是外网访问我们服务器的唯一入口,其中配置了nginx,跳转到多个服务器的应用。
38服务器,8081端口就是访问图片的应用端口。
希望:
通过外网ip和域名地址,可以访问资源服务器上的图片
实现步骤:
1、配置nginx.conf
#cat /etc/nginx/nginx.conf # For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Documentation: http://nginx.org/ru/docs/ user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; events { worker_connections 1024; } http { include mime.types; 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 /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include conf.d/*.conf; }
这里为了nginx.conf文件结构清晰,将所有的跳转配置到conf.d文件夹的不同的配置文件中。
2、配置nginx_9091_38_static.conf
# cat nginx_9091_38_static.conf server { listen 9091; server_name 127.0.0.1 172.16.2.37 59.108.xx.xx www.abc.com; #charset koi8-r; #access_log logs/host.access.log main; location / { # root html; # index index.html index.htm; proxy_set_header Host $host:9091; proxy_set_header X-Real-Ip $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://172.16.2.38:8081/; } }
这里仅列出图片服务器的配置文件,
9091是外网访问端口,
59.108.xx.xx www.abc.com是外网访问的ip和域名
http://172.16.2.38:8081 是图片服务器的内网访问地址,也是nginx将9091跳转到的地址
3、重启nginx
nginx -s reload
可以查看/var/log/nginx/下的access.log和error.log文件,查看访问记录和出错记录
4、防火墙开启9091端口.
#vi /etc/sysconfig/iptables -A IN_public_allow -p tcp -m tcp --dport 9091 -m conntrack --ctstate NEW -j ACCEPT #service iptables restart
5、验证
确保38服务器在8081端口启动了应用,并且开启了8081防火墙。
本地电脑用内网地址验证
http://172.16.2.37:9091/static/1525844569268.jpg
由于本地电脑无法访问外网,所以用手机流量访问以下地址
http://59.108.xx.xx:9091/static/1525844569268.jpg
http://www.abc.com:9091/static/1525844569268.jpg
总结:
本方案是对同一个域名用不同的端口号跳转。
也可以针对不同的应用,创建不同的二级域名,用不同的二级域名跳转,比如img.abc.com,api.abc.com,cms.abc.com。这样就可以不带端口号访问内网服务器的资源了(此时默认端口号为80)。