管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
+ I" q9 s$ x5 ^
4 x/ d. v; h4 r7 p, A# g本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
4 U( Z+ q3 D5 ?* {0 O. l4 c L2 Y' s- Y# ` K$ z
将域名转发到本地端口
0 o* D7 G& v+ ?4 [" R6 ^首先介绍最常用的,将域名转发到本地另一个端口上, |3 p: y% y* Q5 }1 M0 h
- server{# l9 }. A6 B6 ^; r Z
- listen 80;8 S5 X! w( o( v' q. h
- server_name tomcat.cncml.com;
; e B* o* |) T, u& M - index index.php index.html index.htm;
( q! Z9 D- v; i# ^2 ]0 k - 4 O" g: Z, N c3 V+ E, H$ a) Y
- location / {
9 v' R: f1 Z) {5 M$ e# y% Q - proxy_pass http://127.0.0.1:8080; # 转发规则# D8 b" Y8 A$ N7 @4 r) I' P
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
* a* q- w2 U0 g' M/ h/ T - proxy_set_header X-Real-IP $remote_addr; m& f( s3 K/ L {! s
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# ]1 `/ S! s. N# T - }% A. b) t6 s" z, z& C) o
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
/ A" J$ Q6 X1 c9 e. L3 {' z0 j! e$ W; R* Y/ R
将域名转发到另一个域名) A0 ^, c | _. q/ P8 `
- server{
1 G3 K7 ^" X9 N+ ]* u8 _* A' Z - listen 80;8 C9 _% R8 L6 o8 ?/ n6 n
- server_name baidu.cncml.com;
3 I; A8 n' l# Q8 a5 d2 Y5 r - index index.php index.html index.htm;
7 Z1 M* H% y+ V6 K# y% [, u - . \: b8 |( Z4 C4 p5 D# l. \% A
- location / {2 u% ^! I' S& c$ h$ e/ c
- proxy_pass http://www.baidu.com;
$ n, I" Z' [" j - proxy_set_header Host $proxy_host;8 F% ]" h: j: u0 y5 x8 _5 D
- proxy_set_header X-Real-IP $remote_addr;1 Y- j: k3 [' y* m6 Y
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;( v* S. z8 @* G- h+ C
- }
! }. k/ z* b$ M/ X- e5 q1 d8 z7 k% w - }
复制代码 本地一个端口转发到另一个端口或另一个域名
9 J' S3 T6 X" D5 Y8 Y- o# m% m, `- server{
' ~0 w( O' z3 Y' P ~3 F8 D, Z - listen 80;. \! g, ^, K( ?
- server_name 127.0.0.1; # 公网ip$ E% N( u: S8 [
- index index.php index.html index.htm;( `1 T' Y+ e$ s
# i# o3 Z. C i- location / {
, L* v. N0 q2 ?* y/ n - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com1 e4 s0 O' f% O. ]& u U
- proxy_set_header Host $proxy_host;+ _' @ L F) {
- proxy_set_header X-Real-IP $remote_addr;
8 B, @4 h3 U1 X* | - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;+ N* \% r" M3 Z3 r9 o- ]
- }7 m9 n* T& b# N' g: `$ d7 p
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com/ D. A# ]1 {( y; F
& M t1 d5 S2 ~' B8 ?3 I6 I1 N
加 / 与不加 /5 K- I1 P; |1 |8 ?. a
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径* z" q3 m ^' O6 C
( F" t2 x+ F3 c6 T2 H, E
例如7 ` M- c- W" p% ?: ~2 y
. Y1 y" p( T: N% h* p- V3 a8 o加 // j4 \( r9 l' B/ |" L+ W) c' W
- server_name cncml.com
6 t, ^/ p) j) I$ p1 {5 D$ C5 _' P - location /data/ {, O. @" r, t- n
- proxy_pass http://127.0.0.1/;! Y B8 M# l1 K N5 w
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
2 ]. R' I$ n) a0 }7 y3 G! N o
/ _# T, H8 h5 S' p3 j不加 /
9 s8 [8 H. d; ^( U, {; R- server_name cncml.com
7 {3 L2 H1 t) `6 o' \! a, K - location /data/ {
1 @* S3 ]0 m' J" \' @ - proxy_pass http://127.0.0.1;
( v" b" v0 [' n y; r! c0 x( u4 D - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html, M' b! e0 D+ @/ c& K
, ]( o) o) \3 V* I0 ], t
2 |7 U- i4 q, F6 Y9 u; E9 M |
|