管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发' F8 U% T$ o7 W' q
* H8 b8 f: C* e$ F) c
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则* S: j' @; |" _6 X8 k( ~
7 M! b: N0 \4 H- ~& l$ @将域名转发到本地端口" _: z4 P4 H$ W
首先介绍最常用的,将域名转发到本地另一个端口上
6 Q9 T9 G# M! d& v- server{
2 ^* Z# n. k0 r9 D5 H5 W+ s( L) ^ - listen 80;4 ?' t1 u5 v S: |7 w. ^
- server_name tomcat.cncml.com;
! w8 U# f4 _/ D# }. T1 m5 A+ f - index index.php index.html index.htm;% c- l8 s# s; b
- 7 B2 F5 G2 U. B( }' y) c
- location / {! P, f/ d3 X1 c* N: L9 y
- proxy_pass http://127.0.0.1:8080; # 转发规则* c1 z# h( a( }5 D
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求* A4 g7 E, a( h& `3 C
- proxy_set_header X-Real-IP $remote_addr;4 Q' W4 }; x! S3 D. q2 e# f! e* r, G
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
6 U" o3 ?+ p, n1 P. t; ~1 _5 O - }: ^4 c L# W/ d
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
6 f9 U$ M" J6 v- r B5 L$ b6 b
! P' o4 B' d C将域名转发到另一个域名
' T7 p$ C% Q1 Q/ P- server{
& v' m5 r' c" o - listen 80;
3 p- _& u" l9 M& _* I, P) U4 U - server_name baidu.cncml.com;
7 v& Q) y6 a& A - index index.php index.html index.htm; J$ w3 @! i0 I
; t6 _7 l4 ~0 ]3 W& ^+ w' N: z- location / {
: x2 p6 N( u! o' k) \/ `2 K - proxy_pass http://www.baidu.com;/ w( n1 b' g7 b& ?0 @& i
- proxy_set_header Host $proxy_host;5 y* L5 ~* \( e6 |$ V; {
- proxy_set_header X-Real-IP $remote_addr;4 o( ?6 H9 d7 j
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# y4 g) A7 U0 m$ g$ u1 a; I/ z2 B - }" Q) S: O3 J# D5 h0 z7 L" w
- }
复制代码 本地一个端口转发到另一个端口或另一个域名# F7 _8 x' |) Y
- server{
# B7 Y7 j [. q; W( i, f4 I - listen 80;
. M( K2 X @& p5 E& w' {$ X6 M - server_name 127.0.0.1; # 公网ip1 m, o' X Z8 \2 q0 q
- index index.php index.html index.htm;
1 J3 y- V1 X# J2 X8 q0 m5 n - f, z8 G; r3 k/ \
- location / {
! `6 I4 } o! T( R8 ^ - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
2 n3 Q( p. N+ X9 e2 s2 e0 R1 u; A - proxy_set_header Host $proxy_host;% m/ F- ?/ W4 z
- proxy_set_header X-Real-IP $remote_addr;
+ Z9 w, x# R4 b8 d f* P - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
; s" E; k! x1 K4 U7 e - }. [9 r! m/ @6 B$ b
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com9 |& L- b5 h5 t/ e+ ^) U
- G! d1 X& \, a* D5 |加 / 与不加 /
# I1 D0 [, f6 g0 D+ j在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径0 v; c, q1 t6 G* c, r0 U
4 U2 v+ ^3 @; h. d: r
例如$ L( M7 h4 ?7 Z# D; G
8 f% h5 ^1 z: `1 c+ J
加 /' E! I4 m9 g6 ]" z) ]; w) x Y
- server_name cncml.com* B3 W1 V' c9 o. F6 D& P
- location /data/ {
# g& ?0 ]# o0 R3 [* W& ~ - proxy_pass http://127.0.0.1/;3 E' n3 q2 a$ A9 j
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html( C1 D+ n/ N5 t* y
{* e5 A4 q4 Q7 i4 [0 f& c. u1 q
不加 /
# w9 x" r% k$ |' _! ~! }9 H- server_name cncml.com
. b& M; T$ {( r+ l- v - location /data/ {2 p* q, j4 F5 ~' i
- proxy_pass http://127.0.0.1;, R: S* v0 D' X! M' e, ]% e
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html3 r& I+ \7 {2 i% u8 c$ O' Q
: b9 h; [! @* |$ C: p" i$ O
/ K, W2 S( q; e/ ]9 u
|
|