管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
) N0 }5 l6 X/ h* Q. J: ^+ T: i- G' `8 S. b
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则8 M, d5 y; G* y5 q3 i
( m! Y- [# q/ s, q6 [将域名转发到本地端口
/ ]! z- e: L: P1 O, s首先介绍最常用的,将域名转发到本地另一个端口上
5 Q) e2 m" i+ ?+ u( q3 Z- server{* K; L1 B( s. Y1 n9 U$ x5 R
- listen 80;
5 b7 @' A' h; S - server_name tomcat.cncml.com;' M9 t" }! b/ L0 _
- index index.php index.html index.htm;
8 o$ \( D* F0 h/ x' ^ - ' `9 k8 e! V; ~% x
- location / {
0 d/ L/ m/ ]( |0 ?+ `1 s5 k - proxy_pass http://127.0.0.1:8080; # 转发规则" }( @5 S* I) U3 \3 |+ c( G
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求 K0 U: E2 N$ \# G# k
- proxy_set_header X-Real-IP $remote_addr;) B, q, r& l+ [( k
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
6 f" H+ K/ P4 e; f) U% U. N - }* \9 J( P6 K2 C
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
+ d3 d z4 v# B- t: O$ v7 u* z/ j8 ?& B% m
将域名转发到另一个域名
- _- x! y) H1 F- S! N- server{' E* B. c3 l/ b$ }
- listen 80;
; X& ^4 ~" x4 m9 O9 m - server_name baidu.cncml.com;$ w% V+ [* Y1 D+ B2 U. F) O
- index index.php index.html index.htm;% t4 q7 V- @5 b, o
- ) p9 R" a7 d C5 j& m, A0 G6 A
- location / {
* \& I& {3 x2 A6 a+ ~ - proxy_pass http://www.baidu.com;6 o7 b7 T( t% T
- proxy_set_header Host $proxy_host;
9 S0 x, N# Y6 m, S. C* w - proxy_set_header X-Real-IP $remote_addr; S* S9 {6 _- v0 d/ f- j7 {
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;, j( Q+ e- @# t$ d* f: K* \
- }( Z. N' Q- w* H+ ^
- }
复制代码 本地一个端口转发到另一个端口或另一个域名
( B) ^: V( x& Q3 Z1 J4 Z3 T- server{
K8 q2 H! S* L5 s! L - listen 80;
2 b( O8 S& Q4 B Z/ _2 d - server_name 127.0.0.1; # 公网ip
- a/ m- b' J6 D5 Q) E; Q' W - index index.php index.html index.htm;% Q8 L* _7 p3 g7 ]+ I
% _" o9 v* b- P* ?4 k- location / {3 k+ a3 M8 u- D3 i4 W/ y$ l
- proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
7 t7 q2 @7 z. g/ B. ]5 B - proxy_set_header Host $proxy_host;
! {3 W5 K4 w( w3 m2 G. y" |6 t) A - proxy_set_header X-Real-IP $remote_addr;. h! T! @" x( g. H/ ? i
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;- D, `0 ?; S$ B6 b$ Z4 U
- }
8 [: a2 ?8 V; H - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
$ o5 U5 K. B. a$ L5 y- q* H: f0 u0 v( h4 A9 M; u/ J4 w" J
加 / 与不加 /( B% S4 S; D4 p' Z# g
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径1 E7 l# u. ?7 M1 w; [2 Q
4 c( I2 ]$ a, B3 X; J3 j, X例如
( Y, H9 v8 _. I5 o5 N; Y. P" q- o
4 P, Q, m- ?8 d) g5 X4 ^5 `加 /
% @6 e+ B5 `( n/ o2 J- server_name cncml.com
4 V6 |2 j4 b. S8 l" i - location /data/ {
. l& P S+ h u8 m, P - proxy_pass http://127.0.0.1/;" P6 l- \% q# D( B
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
" |1 |& p& o% m: ~! m) d2 C9 J- J8 @0 ]% ^( a) Q! j {
不加 /* ?5 I, p2 P; ~, x/ A3 C9 e8 }3 o
- server_name cncml.com5 D8 {, \* o* u- Z
- location /data/ {( j7 Z2 }& H, q8 S2 H3 B
- proxy_pass http://127.0.0.1;
* o; Q1 w+ Q) t" k - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
* N4 X/ _8 f' G# z4 G
7 @' J; A' F/ R! g* a' @
& R5 O8 V- q; v$ B& @ |
|