管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发* p( W$ x2 |# k6 A3 @5 z) n
- N% Z# Q4 l S: M
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
y3 P0 A7 W% S+ T
& I, t y0 u# g将域名转发到本地端口
( H# j2 ^) q& S: f首先介绍最常用的,将域名转发到本地另一个端口上7 y8 f# X. q& u) D
- server{* R. c# n# ?/ e
- listen 80;
4 s1 s0 L7 P' h) b - server_name tomcat.cncml.com;" [4 T% M9 n }4 W- u: k
- index index.php index.html index.htm;7 R) ]/ j: N3 V, X3 K! R/ a
- 3 g5 T9 E% ^8 ?* U2 b' B
- location / {
. G) }- K$ f: N, O, J; z8 l! U. e: L - proxy_pass http://127.0.0.1:8080; # 转发规则
- b, d- M( a% _# V1 c - proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
: I. G( i9 e) U: @0 ~" r$ ^3 E0 j - proxy_set_header X-Real-IP $remote_addr;8 u9 @+ {# B# d+ ~! |& M
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;3 f& U* T# N- c9 J- ^% E# O: l
- } {7 x" o# b- M; ?- o
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
4 s+ p0 v' A, C4 E2 j1 M8 A! o' v( l. J
" \8 F# J# M" J4 ^8 S0 x将域名转发到另一个域名2 k. a4 R& S. B& g
- server{0 C- F! J" Q+ A' r, B6 E
- listen 80;
+ E: m# ]* o1 s - server_name baidu.cncml.com;
% u7 L/ g/ ~! g5 a! s4 h - index index.php index.html index.htm;; `- r- I# a. c/ z) f% r! i" Z
- , V# v3 C5 ~( x k+ `" k
- location / {( v. A! v6 u4 g) ?: k
- proxy_pass http://www.baidu.com;
; [; [1 B! P0 E* h7 P - proxy_set_header Host $proxy_host;( P% B1 r$ E5 ]) ?
- proxy_set_header X-Real-IP $remote_addr;: o4 l, R/ N8 K- `# e9 }8 I
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
' g# C4 l( O2 \! l5 ^: n# \$ k - }
# w) G3 x* c. a: I2 | ] - }
复制代码 本地一个端口转发到另一个端口或另一个域名
- a# D: `, |4 G/ C* @- server{
4 \1 k1 B+ }8 @ - listen 80; B- |& p7 B' C3 D% \6 n8 L8 C
- server_name 127.0.0.1; # 公网ip* z( _2 D4 m" F/ Q6 D) C
- index index.php index.html index.htm;
9 ^1 `" E8 ~1 X: C! K* \" n
% y# M F& Y5 \- D. ], P" H, j# g6 `- location / {
2 O, Y9 `: \/ J. L8 b& l - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
& y$ }, o2 C/ q - proxy_set_header Host $proxy_host;/ ~+ ?5 G; w$ P
- proxy_set_header X-Real-IP $remote_addr;
# L) E8 Z& S. U5 k8 t" D( `/ f$ B - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;4 }5 E! V- M0 ]' W) E/ [2 P# B2 I
- }6 S \/ u7 i8 L0 Q% Z: j- j
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com( m5 k4 P7 [, e3 g
! h" d) b7 u& D8 d7 u2 g加 / 与不加 /
+ X% O2 u5 q3 J8 ]在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径5 Y8 H. u) `* `" I, }4 C4 k E
+ \0 a7 K3 w9 T$ _0 z
例如
l# R* `' K. J2 Y- D
2 `5 v& J1 F5 ]# ]8 v加 /
( q3 n8 O% T: O# [- server_name cncml.com. e8 Q2 n9 w$ o; y+ L
- location /data/ { Y3 {7 ~5 r& V8 l/ ~3 o' ]
- proxy_pass http://127.0.0.1/;
( A$ ]$ R. s$ a8 ^3 e" H - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
J& Y. U* F) E! y* O9 @4 [$ V9 L1 e: D5 p0 t Y
不加 /9 W8 o3 R6 n( M6 ?4 [
- server_name cncml.com
' C2 L4 O2 Y7 Y+ F' Z. x+ s - location /data/ {% O% z1 a/ |4 K1 Q
- proxy_pass http://127.0.0.1;
' ^) F- u f3 }; [ - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html. M) |! f) A' y/ ~
" a$ y( x$ V1 M [+ P& @7 r! l6 w0 }# S" w/ J! T) w4 s0 [
|
|