管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
# S& a5 |1 T0 a: d- F8 r
# T: t9 \- A4 q2 }2 g! g; F0 p本文中,我们介绍Nginx如何做端口转发,还有各种转发规则0 b/ Q1 Y+ ?+ i) c E
5 M$ d/ `$ J& r) b将域名转发到本地端口
( } B$ V7 v. b* L4 i. T首先介绍最常用的,将域名转发到本地另一个端口上
. Q8 q1 O2 _+ w: v- server{. b9 k Q6 B" p* k0 x
- listen 80;
! m9 K3 \: K: `* T, J - server_name tomcat.cncml.com;
9 X7 a4 V1 S6 c T$ z - index index.php index.html index.htm;
& c4 r2 m; {2 j" P
6 f( `% ~, p( K/ u9 D- location / {
4 l. J, m! w# H4 ?5 |* l% ] - proxy_pass http://127.0.0.1:8080; # 转发规则
) I& e5 T3 F$ v4 G8 g2 K2 t - proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
: a$ Z7 u/ y, u+ z% c* ] C) \) y - proxy_set_header X-Real-IP $remote_addr;
. `* [$ K" v2 W0 q% S - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;4 b, {/ l- d, |4 _
- }9 r/ }2 `) V4 r, t% M! E
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
9 s0 Z7 ]" Y& s4 {) S- o y& {
将域名转发到另一个域名$ r2 t e! G! W; Q# ^
- server{
U( |' Q9 Z+ r' a1 z3 V5 Z - listen 80;
" E; i( |8 n) n5 v* F2 K - server_name baidu.cncml.com;* y# h R1 ^7 D) u
- index index.php index.html index.htm;3 r5 A+ X9 D% W( a4 \2 q& x: P& k
; U* _4 F9 r: j3 |- location / {# j% q$ u7 r2 v& i
- proxy_pass http://www.baidu.com;: O3 u% R* a* r7 B* O, T
- proxy_set_header Host $proxy_host;
2 Z. a% x7 U$ A1 I - proxy_set_header X-Real-IP $remote_addr;' g( \4 s2 c. X2 \* B
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
; p) J& q& o0 d4 x9 F+ [ - }
$ o+ _: F% K2 t, [6 R! d. Y2 R7 M - }
复制代码 本地一个端口转发到另一个端口或另一个域名9 e" l% V0 {! n3 `1 |' y; P# }4 O+ F
- server{5 r' q& q' t& `( { W3 p
- listen 80;
" x0 }0 R! r- w) n - server_name 127.0.0.1; # 公网ip* Z2 w G! T( C$ T j( V r& D; ~9 E
- index index.php index.html index.htm;4 f; y6 e" W; S9 ^1 o+ k9 ^+ D
- 2 [7 \- l# c {0 q$ u ^& a1 f
- location / {
7 l O# q+ T/ j/ T* f! T& P - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com* s$ F+ ?9 |7 O+ e# `
- proxy_set_header Host $proxy_host;
8 x# L2 l1 ~+ [0 V; B - proxy_set_header X-Real-IP $remote_addr;( @! m" X- ^5 |8 T+ A- g
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
* Y* n1 j* B$ v# u; ~; C d - }: ?" W5 _2 l+ @% j
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com' ?5 i$ y7 y! K0 W3 B
: A: _: [; b% H `
加 / 与不加 /. z6 h" m1 g0 }) S
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径 y# Q* f/ g! L [# z
" @9 ^" R9 K) h( [8 z0 n: w' y例如2 ]; x* x/ W, T3 C. ^: y' C, r3 H
' T7 _* G" h4 D6 H
加 /& ]3 H+ `: P/ j c
- server_name cncml.com* R% W' j" B; W2 Y7 f2 `
- location /data/ {
1 I2 M- m" v: W4 E - proxy_pass http://127.0.0.1/;
8 X/ O4 s0 ]3 a; r# Q8 T - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html, D" A- o5 e% @, s5 b
7 E4 O. ^# y$ z
不加 /
* n, ?" a7 s- C+ E0 w- server_name cncml.com: m3 @ G `9 b3 s6 n' n( x. V
- location /data/ {. G- E2 h7 |* E, y- n" B
- proxy_pass http://127.0.0.1;
- z' s3 }# N l. p0 ^; k - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html% o& f) B* p7 j, B" U5 {
( \- ~% h. H' Q. g5 [" g3 F4 E" o% u
|
|