管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
, `2 e! X8 d- I# k) I3 {
! C; i) R2 i( g3 k' @本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
7 k3 s4 n! A# A! E
/ ~& ~' X# c1 K' C6 p将域名转发到本地端口7 }8 t8 |! |6 g
首先介绍最常用的,将域名转发到本地另一个端口上
+ u" e7 ` e7 G2 b( ^7 z( K- server{5 A& N3 D4 B' H
- listen 80;3 O p# Q" p% P( J" T/ {
- server_name tomcat.cncml.com;
' _3 s% b. y- O, }* ^6 V+ Y+ D - index index.php index.html index.htm;1 [* ~) }" `& e. g
- # x% ]1 Y+ P$ l! ^8 c6 i2 Z
- location / {
- ?, D% s4 R5 w# {, N - proxy_pass http://127.0.0.1:8080; # 转发规则! O2 W8 x4 H; C8 w' G' C+ G
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求* t6 f9 x$ s' Z) u
- proxy_set_header X-Real-IP $remote_addr;6 T3 Z, h: w, { F$ g2 @
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;- e- {1 H& M7 k" R: M- f
- }
; \' W7 A9 i' |1 h: e - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口! x& j) s9 I, f, W0 Q* P3 C
: J5 V/ c5 j7 F: b& v! j7 s/ E! u7 Z将域名转发到另一个域名) D. t, j5 |# H; j4 S) {/ e
- server{# _: U( X# T1 P1 L" K1 ~
- listen 80;
: f3 x# U& [ M: H2 Z- v1 h - server_name baidu.cncml.com;5 U1 c9 E3 u0 s9 l9 a2 |
- index index.php index.html index.htm;, E# w4 M7 D9 U0 F
- 2 I) { m1 `- c# x* H4 S" B4 z0 c; v
- location / {0 ?2 f9 W+ k0 {$ T, k7 l
- proxy_pass http://www.baidu.com;
: O; T5 h* w, ~5 o8 Q, T6 C - proxy_set_header Host $proxy_host;
, t$ K( t9 [7 E3 [; I) u+ O0 d - proxy_set_header X-Real-IP $remote_addr;
) P4 v- [/ T7 L; |$ [. r) g - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
, w( C5 h' F% H( h4 k - }7 Q5 r6 _) Z+ x$ S; E6 E' e3 J m$ v
- }
复制代码 本地一个端口转发到另一个端口或另一个域名7 ~/ q* @% _% X: `* V# e- F7 J
- server{
7 i& D c% l& F* }9 c - listen 80;
2 L: z- U% z" z: M" @: b - server_name 127.0.0.1; # 公网ip) N7 z& B# z: n; p; k
- index index.php index.html index.htm;
1 E1 l5 B0 d x" ?; P7 o5 S - ) C7 e. @2 M4 `" q" }
- location / {
+ W' g; Q( F( r8 Q8 _ - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com6 ]8 v# J9 K( f7 @ `2 |/ l
- proxy_set_header Host $proxy_host;- M/ w p+ L8 Q, A5 j9 m
- proxy_set_header X-Real-IP $remote_addr;
% z0 X9 O( e$ B* ^. y& k! ` - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;: ^- U3 h/ C, r+ o. O
- }
% k2 y. p) ?4 l% E/ Y6 @" U - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
- u U6 K) ?; U7 U0 x( M/ t' \& h4 t" f- q& s! U! y' E
加 / 与不加 /
" v& m! u6 l& I8 V3 y: ?6 \; T7 ~6 i% X& @在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径" `+ O+ P! ?- }
7 p7 G- M# i/ f- g
例如% @, A( O- u3 t! a
8 p& y: Q6 S0 g
加 /( C7 D4 |6 }2 W) M4 Z
- server_name cncml.com: G( ^$ s. e0 d4 p
- location /data/ {, F- U3 m) Y Z
- proxy_pass http://127.0.0.1/;
h) k7 E* E+ ` - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html# h0 Q3 s, @2 C6 C' b% E
" N) U- ]; h& |9 o! a不加 /( @, W, ]3 U6 V3 @. L. g* {
- server_name cncml.com/ {" O6 M0 q6 P$ `8 {& j
- location /data/ {
7 p" f$ V5 a9 k" o+ P* O$ g - proxy_pass http://127.0.0.1;6 v8 q7 D* Q* f. m( A. q( m4 j e
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html4 a+ L6 t, |& z) Y# B. E
. K5 @9 o9 H' }$ ]4 {+ N) W) i9 e- M5 `+ f- h( M7 l
|
|