通過Nginx代理實現內網主機訪問公網和接口服務
1.需求:
m2.test.com為公司測試環境的微信測試域名,因為要調用微信服務接口需要訪問外網,現通過Nginx代理現實此功能.
2.環境如下:
10.20.9.31 為內網測試環境Nginx的代理主機,代理測試環境的java程序.
10.100.64.18 是Nginx反向代理主機,公網映射地址為:124.251.12.198,在此上面配置的域名通過解析后可以直接訪問公網.
10.100.230.10 也是Nginx的代理主機,通過NAT轉發實現內網測試(10.20.9.31)和機房主機(10.100.230.10)的互通,其中10.100.64.18和10.100.230.10是互通的.
3.實現步驟:
10.100.64.18 Nginx配置:
server { listen 80; server_name m2.test.com; access_log /tmp/access.log main; error_log /tmp/error.log; location / { proxy_pass http://10.100.230.10:80; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For } } #80和443端口都代理到230.10:80主機上面去.
10.100.230.10 Nginx配置
server { listen 80; server_name m2.test.com; access_log /tmp/access.log main; error_log /tmp/error.log; location / { proxy_pass http://10.20.9.31:80; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } #這個直接代理的是測試環境Nginx代理主機,也可以直接代理后端測試環境java主機,但是建議直接代理后端Nginx主機,然后再內網Nginx代理內網測試java程序,已方便維護.
10.20.9.31 Nginx配置,代理測試環境java主機程序.
server { listen 80; server_name m2.test.com; access_log /tmp/access.log main; error_log /tmp/error.log; location / { proxy_pass http://10.20.9.53:8009; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /static { alias /opt/mobile/static; } } #這個代理就可以對后端程序進行代理和設置
實現dns解析地址
m2.test.com 124.251.12.198,這樣就實現了通過代理實現內網訪問公網的服務.
結語:上面的方法實現就Ngnix代理走了三次,其實也可以直接在10.100.64.18主機做NAT地址轉發訪問10.20.9網段的地址,少走一層代理維護也方便.