管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
% y7 \; W9 _! r6 @* D3 x1 Q) i |" ~1 C, q c+ L7 g
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则; ~0 ?% O0 D5 Q+ n: h+ u
5 |: b) ^; E# A/ a ?将域名转发到本地端口9 z% Q& [: t' T5 B+ ]( B' O$ x
首先介绍最常用的,将域名转发到本地另一个端口上
; d* G! v# f8 A6 m- j& d* |4 V- N- server{
2 o- q5 B9 C* `. Z - listen 80;- l7 G& m+ |4 e$ `# g$ Z& f1 {
- server_name tomcat.cncml.com;' m5 m0 m5 [- L2 y& o: Z
- index index.php index.html index.htm;* V/ {9 s ?" L5 S
- " Q* x% |3 ^5 }, u
- location / {
7 U( l3 u1 I8 e9 Q - proxy_pass http://127.0.0.1:8080; # 转发规则
" O' ]+ p- e# v. W8 |6 F - proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
* P9 g: k q. ^ - proxy_set_header X-Real-IP $remote_addr;- N2 h ?4 d& @1 z4 R( d5 l& I
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;5 Y' `4 w$ w2 T( W) j- i, w. Y
- }
( i3 c+ X3 Q+ ~* o6 r9 [& g - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
1 [* v! q, I8 R) N, t! \; @4 ` h h/ E% O1 b9 K
将域名转发到另一个域名
5 z3 v1 W7 W0 ?1 F/ K- server{" F" L# s% [! r6 C2 i
- listen 80;
, n4 p+ K. {0 ]3 e* D' G% d - server_name baidu.cncml.com;8 {9 z. u1 d) ~5 H* ]$ ]& J8 b
- index index.php index.html index.htm;0 z# W/ j( h" I: z- [- r8 g
- 0 ?& |% X9 T+ [0 P' D
- location / {& K: R+ o* f2 j$ W+ D
- proxy_pass http://www.baidu.com;
s/ X9 R1 G- m! B - proxy_set_header Host $proxy_host;$ O% Q" A8 g5 F
- proxy_set_header X-Real-IP $remote_addr;
4 V/ P5 F; A3 V4 _, l - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ Q& S. Q0 y; J - }
$ @* w4 W; d: K0 j) I - }
复制代码 本地一个端口转发到另一个端口或另一个域名
$ q- t- F& v. Q- server{
/ ?9 r L1 H: x a# t - listen 80;- u# A: e6 C6 L8 }! s' ^- h
- server_name 127.0.0.1; # 公网ip
: h' W4 p9 z+ d# m, M/ v - index index.php index.html index.htm;& k8 s' n% M% p K5 p
- 4 X6 x% y7 V% O( h
- location / {5 a: q5 o9 g3 @' W4 G7 ~
- proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com6 u J. t& e9 K) ^
- proxy_set_header Host $proxy_host;
7 W0 E) V( {" \, c' h" k; c - proxy_set_header X-Real-IP $remote_addr;
3 j. Q) \9 z3 M+ o2 S" `" Z - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
( n; J. j' v% _6 C - }
" V# v4 }4 {) {; ?3 o, @$ x - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
/ S# C$ w0 N6 W4 d6 Z3 C0 k; `- G; e2 Q
加 / 与不加 /9 t8 ?9 v7 B6 ~3 u( v, ]7 R+ n3 Q
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
9 v6 z+ r' [* l: p: d' |& H3 q( P3 n" k, P/ G# }+ m; f8 D
例如+ Q7 o1 O0 t( A, P& b# O
/ W7 S. B5 h D9 p
加 /+ k/ ?8 f+ J, I6 k3 A
- server_name cncml.com! }- }$ Z: m; s7 T7 p* G: k
- location /data/ {
+ f* t) E: V( [ - proxy_pass http://127.0.0.1/;% B; C9 T% M* v
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html1 g3 }- a4 l$ ?6 }! i+ F
8 Y# A- |' {8 s" |$ a, r/ }: i
不加 /
: w# T/ k' J0 C1 Z- server_name cncml.com
5 \" }. R% B2 T; a - location /data/ {5 m3 N; ^) X& Y
- proxy_pass http://127.0.0.1;
6 A7 V3 d* Z8 \' ^6 B% X - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
* C7 b E+ q/ A8 g+ e2 C% o- |+ S; ^4 R6 b2 A4 `
! O9 M1 U( { ?2 H |
|