管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发- r/ U' l7 |- e' E
" w% ~: M6 q: |1 V. B, D& m- T* e本文中,我们介绍Nginx如何做端口转发,还有各种转发规则! [8 k( z2 f( s6 t. P7 m/ e" G7 P
/ J: J- y( ]& j4 b" g8 C
将域名转发到本地端口
! B: H1 U+ k" b首先介绍最常用的,将域名转发到本地另一个端口上8 n" \9 P& r3 y j# i* J
- server{
3 F; }' j# X7 ~2 V8 l; Q- s - listen 80;1 E6 o' \5 ^/ d/ m
- server_name tomcat.cncml.com;( z" P, N+ D5 S
- index index.php index.html index.htm;
6 e _: S' `5 l( D9 r
& f1 ]- d4 ?0 Z' }# v8 r% L: ]- location / {* @; y- h! P+ `7 a. k. f
- proxy_pass http://127.0.0.1:8080; # 转发规则# `5 U( V3 x& K2 a0 n u1 G8 Q
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
8 @% C! i8 a9 @0 T+ e - proxy_set_header X-Real-IP $remote_addr;
- p7 Q$ I* o, e2 q b( F9 u3 a/ v5 W - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
, Z, Y1 ]. c. x8 s* J$ } - }
& q5 T/ s$ X& |: Q# ?+ e* C7 Y - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
4 x4 w9 f3 ?9 `5 a) q2 b* K! v) A/ K: L0 `3 _; W J/ B# U9 h
将域名转发到另一个域名
- A" k* R7 ^" Z% P/ ?4 |7 m8 ~- server{+ X2 k& C4 y- c+ P* V6 Z& r6 C
- listen 80;2 |5 ?7 Z' C4 O
- server_name baidu.cncml.com;6 D3 ^ ~) g2 b6 r( R9 `9 a
- index index.php index.html index.htm;
) }2 v% K( \& W( d$ Z1 d8 h4 r, y! h" S7 s - / a* h2 P& p) N7 U. P8 l
- location / {
. I2 l- T, ]2 U5 X* U' Z - proxy_pass http://www.baidu.com;; n+ I7 P9 M4 {/ {& e8 x* ?6 X
- proxy_set_header Host $proxy_host;
; ^5 T3 R u7 D - proxy_set_header X-Real-IP $remote_addr;
) u2 d& N+ L* Y* X$ B+ j. q - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
/ ?/ W$ h2 T. \6 ^" ` - }6 E- S; d! K+ f$ ^" y
- }
复制代码 本地一个端口转发到另一个端口或另一个域名! Q" Y9 W( M; U
- server{ D: h5 O# _) [7 f6 A) w5 r
- listen 80;
1 `8 N9 \0 g/ D% ^ - server_name 127.0.0.1; # 公网ip
2 R. C( w! R( |- M. ~ - index index.php index.html index.htm;. F8 ~: R' G# m" J9 a8 K6 Y
, A+ x4 t- E: B% Z9 u6 h+ l! t- location / {
: a) a6 s* t9 k* P- [4 B# ^ - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com- `* m6 _( [' J: a% U1 H0 x
- proxy_set_header Host $proxy_host;
6 k2 I4 u0 g/ @/ t* m% ~( u% k - proxy_set_header X-Real-IP $remote_addr;
1 u1 ]% U4 u5 Q+ Y - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;( K" G' V* f' E7 c6 R+ D
- }
. _! D+ ^" ?# D - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
7 b" U& Q+ u/ _6 i4 z% z' \6 b% s. p3 {" b
加 / 与不加 /9 e( a- U2 y h3 I3 t
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
) v) H( @! |/ w
8 P5 N5 L3 ]# S/ b例如
}" ^8 y3 m2 E. f& b% w" p' D) ~( T# `+ W7 I: T! Q+ c
加 /
2 A5 V2 U% p0 F1 J7 T+ H- server_name cncml.com: N* G$ S r0 B5 Y8 j# E1 c
- location /data/ {
7 m4 d. [3 {! K |- e - proxy_pass http://127.0.0.1/;, _2 I; [8 l# N0 p u* \3 F
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html7 e: @4 Z. |; }, }% e* m
* u$ K% u9 A& Q U0 u, t不加 /
4 b4 k0 R: L) O- l5 |- server_name cncml.com8 A* M& ~' t h2 K1 V# n% ?% P
- location /data/ {- l9 Z# Q J1 o
- proxy_pass http://127.0.0.1;5 N" @$ P, u& x# M* H
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html- ~- R# A9 G4 c6 Q; `
; a3 f4 t. r8 X" X; s8 K9 z
h/ H& @6 g( [: i |
|