管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
) [$ u. a( i% \0 W9 B o2 U4 c+ B4 F& A- |9 x9 r9 h
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
4 \& a3 ]! q4 J/ b
9 L8 O( c+ g- O+ M将域名转发到本地端口
! R c+ ~- F2 \3 |& _0 h首先介绍最常用的,将域名转发到本地另一个端口上& t/ A0 X4 R' C {) m. i+ I; N) x
- server{
0 z& m7 F. ], p* t( U0 ~- m - listen 80;
2 H C& f& D, x, M+ W& W% @1 c - server_name tomcat.cncml.com;
+ p7 A T0 [7 W, r, h+ E - index index.php index.html index.htm;. W/ [( ?- G( `
" _! F R1 O3 N! z8 J- location / {* n" z7 r, |% ?4 J6 x" M
- proxy_pass http://127.0.0.1:8080; # 转发规则/ u, s3 W+ E9 m7 |( \* ^) N. I
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求! a! p& k; M7 O' v/ v4 N1 f
- proxy_set_header X-Real-IP $remote_addr;
c7 j/ P: P! E& S+ q9 E3 { - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
7 [+ ^$ D2 O/ ~+ U5 { - }
0 M/ L) d# p7 S( c+ K - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
1 W5 Y* X L* C* T9 K1 [
( `$ G7 D8 c- z% |: O将域名转发到另一个域名 x; F: f- `. D9 Y( H
- server{
: [& b& T2 J6 v - listen 80;$ P6 \1 o! T, \: T
- server_name baidu.cncml.com;
, N# ^4 j" n0 [ - index index.php index.html index.htm;* I% b9 R( V9 R H7 T& f
- + Q: j2 m2 j9 Q8 v( v
- location / {
; h6 M' x/ W9 N9 e2 G - proxy_pass http://www.baidu.com;6 b$ Z2 D% T0 @% k
- proxy_set_header Host $proxy_host;: s3 x7 J3 K8 X! M3 R
- proxy_set_header X-Real-IP $remote_addr; F$ v3 L) o6 C9 K0 z. ?
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
7 ]# \1 N, j" u e- G3 H( R - }
V# L6 V' A) v9 y l7 r - }
复制代码 本地一个端口转发到另一个端口或另一个域名
6 s8 `: ^! m0 {- server{
) g5 _4 C% @4 M- P! G/ I2 j9 V; S - listen 80;# i) B8 b6 K( A+ q% T+ A) Y% z5 u
- server_name 127.0.0.1; # 公网ip9 Y8 A2 ]& w7 Z2 K" d
- index index.php index.html index.htm;
+ V$ j* _* F9 m+ s. ^8 y) S, L - " Z/ v0 S- h3 i3 v* Y
- location / {
3 u2 V& i& K8 K0 V7 d# {* a2 t - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com' `3 z( c& K( a, W4 r) c4 V
- proxy_set_header Host $proxy_host;. e$ g" l) C7 p3 O" Q; T
- proxy_set_header X-Real-IP $remote_addr;
, g4 z% J% N8 r% ] - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;! j- s* b7 w: u* R2 P: f! C8 t% N
- }
8 @* d$ Y$ c6 k Y' b; O* z. B I - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
' d" r0 X$ x' y) F, Z' T w9 ~4 ~6 G/ S8 g
加 / 与不加 /
5 p2 y) }( c$ Q( ~- k2 n/ X在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
# K2 e K- O- c+ p
: v! H; y4 L0 j& _例如: b5 Z- n2 m9 c* A8 P
6 y, F* _( N: o" U3 f) H加 /7 W5 g' s ~7 K* F$ N' G: O# s7 u
- server_name cncml.com
& r" Q1 V) \3 F- V7 y0 N( t - location /data/ { r0 h+ N u; m3 k) ^1 X7 A
- proxy_pass http://127.0.0.1/;
. e' o/ c8 @% D/ { - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html% H, U3 D' ~5 ^
6 k4 s* O `" m- B不加 / [$ U1 x. Q/ O0 B$ n# \( R
- server_name cncml.com) L' D& L9 E! y- U
- location /data/ {
0 Y6 A# Z: w( K$ H - proxy_pass http://127.0.0.1; {: A. u& Q& k) o
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html6 V1 d8 Z0 k3 ?3 `$ Q2 Z3 p8 w
9 G1 N3 L N! I0 x& g$ s5 a4 N/ U: t: k Y7 |" H0 V2 E& p- A
|
|