管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发9 V( Q! U; N0 F; h# q+ V
* x. h! L" x0 ~
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
8 y$ n( F" _+ r1 G% ~
, M1 m C6 ?' \将域名转发到本地端口
5 X z1 f/ }9 l: v( r" l首先介绍最常用的,将域名转发到本地另一个端口上
2 q# F# J' Z6 v$ D- server{
- i0 \/ J+ P' o - listen 80;/ ?/ E! R% S. S/ [# N/ T
- server_name tomcat.cncml.com;- g+ J. X" i" e, s0 _# u+ w+ B
- index index.php index.html index.htm;
7 n5 b8 o: T1 T) F% A; V) j - ( F7 n/ j& K. h) w) s& j2 X0 j
- location / {
& j' G5 ?- ?3 W( Q - proxy_pass http://127.0.0.1:8080; # 转发规则
0 O; V9 m/ N" I' u; [7 v& j - proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求7 w: m' \% V3 D D2 ]# j6 Y
- proxy_set_header X-Real-IP $remote_addr;
% W3 |$ z) _$ u - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;2 A2 ]9 s& _! `7 r4 z9 m
- }, p/ ~: n7 P( u6 P
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口! }) y) [: a. m4 ?: B/ W6 O! l
; B& [1 L: \0 n3 n
将域名转发到另一个域名
- w; @/ Y6 U" F( \- server{
3 |- T- p( v* r* [+ h - listen 80;9 o. w% q9 ^+ |# V# \
- server_name baidu.cncml.com;& D M% s. a. N# p; I; z
- index index.php index.html index.htm;- F# Q6 @/ ^1 p6 H P
2 o0 E6 @4 i: c- location / {. S. I4 n% ^1 c$ u [' |
- proxy_pass http://www.baidu.com;
) u0 U0 f( q ` - proxy_set_header Host $proxy_host;+ n0 [) {8 Z' z- U' \( c
- proxy_set_header X-Real-IP $remote_addr;' }' v; `% \' c; y
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;) @5 R! u+ }4 @! b* R: v
- }
+ F# a: Q. e* K, W4 o$ g$ e - }
复制代码 本地一个端口转发到另一个端口或另一个域名% Q. ]& n5 Z" M9 i) L* _1 g. `
- server{
9 |* E1 U- ~$ C7 U4 i - listen 80;! ^1 ?' y! ]' Z. U) R! z p7 t
- server_name 127.0.0.1; # 公网ip- Y; F7 ~# ]1 K! B: Z& B7 t& W
- index index.php index.html index.htm;
]9 K- Z# v' |9 r5 r, Q9 V7 o. U8 n
% J9 S- q8 Y3 [2 ?+ e; i# p, D- location / {# ~) i/ v1 v7 E1 ]) C4 V, \" o
- proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com" C+ X/ S! x4 X% z) |
- proxy_set_header Host $proxy_host;
( [$ B8 j8 P4 {# b - proxy_set_header X-Real-IP $remote_addr;
8 U9 v5 L! X% j$ E - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;* o0 f6 m# s8 W' F
- }
( j9 I2 Y& N8 \. h0 h - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
( X1 z5 R" y) V$ z) @0 x! t8 B& G9 M$ F. H
加 / 与不加 /
0 k/ t1 J8 N5 y2 | E/ |在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
7 l- M9 m; N y
. E/ A7 r, ?; m3 t! F* B例如
5 d) e" U! D. ^7 G, n! O4 r* E# D* d) I' G
加 /
5 j u# x$ F \5 r, f; A2 B+ U- server_name cncml.com" X: [1 \: R2 w9 B7 d
- location /data/ {
# T$ d7 e+ C3 V+ K - proxy_pass http://127.0.0.1/;+ B) x; E& ]' ]. A- X
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html$ D3 }5 a0 {7 ?3 v" e! z
) ?" B' H# W# l3 U" Z Z/ Y c( `: w不加 /
, z3 B* G1 ]' x1 }! k9 H5 s- server_name cncml.com) s5 B* y: v% y5 F* P
- location /data/ {( W0 ~. F! C" s7 N
- proxy_pass http://127.0.0.1;
% Y( s0 M# s0 b4 E: M- I; B- W - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html( z1 k$ O. l+ s6 _
2 ?# c" S; {' F1 Q4 ] A% S. e0 G! ]5 O4 w( x
|
|