管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发( S- m/ a; a; J4 V- u9 I6 x5 e
( f. D3 I5 f# z8 C- w0 J
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
" k2 | `; j" s+ m. R9 O& C* y) |( O; G
将域名转发到本地端口
0 e: a. i; q# r首先介绍最常用的,将域名转发到本地另一个端口上
. I' B, B+ `, C5 |( U! Z- K- server{
( }6 G$ L/ R' M ~ - listen 80;. f4 z8 I6 v1 x; D, O
- server_name tomcat.cncml.com;) L' P. y3 r2 z9 S0 L2 o* g
- index index.php index.html index.htm;( W8 N! M1 Y t0 L* f, O+ c3 R. L
% \8 M2 v$ Z2 Q! I8 ^- location / {" O" G: S \8 \) ?7 i
- proxy_pass http://127.0.0.1:8080; # 转发规则+ @: y5 P! R7 |) B
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
' Y" `; z+ \, `! X3 J - proxy_set_header X-Real-IP $remote_addr;1 j4 S0 K' o8 K$ _( E
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;+ v& `. {4 {9 ]' v
- }) {- i8 F2 J0 U0 w4 w3 H# L9 {- y
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口' M! Z" y) T0 h+ i/ H: K1 y- n1 w
, ^; ^* J e' m( Y" ]" m
将域名转发到另一个域名
7 I, |2 j- g5 x2 S, U- server{* r4 L, G5 J5 V ~. m7 ^6 }. M
- listen 80;* F4 T+ l7 E5 n, ^
- server_name baidu.cncml.com;
* A; p9 D0 d/ @9 ]8 i: ? - index index.php index.html index.htm;
$ m; B! x( Q( @7 K
9 B1 G5 z* Z% u- location / {
2 ?6 J3 J7 F2 _8 J; {) s" ]* v - proxy_pass http://www.baidu.com;: `, U% Z/ ]5 z' h# v3 D& l5 c3 m
- proxy_set_header Host $proxy_host;/ X s; ~* @ \, F, c
- proxy_set_header X-Real-IP $remote_addr;
9 B( \5 s2 G. ~ - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; v( ~) i- X" r2 b6 q
- }
. T: w# d* i" A3 v6 h' b - }
复制代码 本地一个端口转发到另一个端口或另一个域名
2 T9 L/ p! h5 F+ N5 [4 R- server{+ H, v0 P4 Z$ B* I2 U3 b% b& J
- listen 80;$ Z8 F/ v; S* N+ O
- server_name 127.0.0.1; # 公网ip
2 @. U6 `% K! m u - index index.php index.html index.htm;' H1 V; u' t/ `( L7 K4 v
- 5 z: R! Y( S8 K. s# Z$ Q% Q9 @; l
- location / {
; Z4 G$ @' b. w - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com, |5 [5 ^0 D! g: T
- proxy_set_header Host $proxy_host;5 b" s! i$ F8 l- q8 {
- proxy_set_header X-Real-IP $remote_addr;
3 Q1 a7 k8 \; n3 B9 e, ] - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
( r! W7 U; R! M5 ] - }" I* s$ n+ T' F4 f
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com! ^/ a" f4 D |4 s
8 L% {1 N* F* P8 h9 p加 / 与不加 /
' y; q2 g$ ^( E1 w1 Q在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
! x: q, ?7 i# u8 z g( ]
$ j0 o/ L9 k: S" S5 j, H5 X例如" N/ A* M6 y; z: ?, M: w
3 r0 @) }' f8 P8 L/ |' z
加 /5 h0 p F0 F/ E l/ J/ P$ F
- server_name cncml.com4 ]1 Y1 T8 T/ r$ _
- location /data/ {9 K& ~9 {. P" P
- proxy_pass http://127.0.0.1/; `- f+ t* ?- f' O. W
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html% H- O9 f; d9 |3 O4 W
( C! k+ Z- C `: { ^! b6 w, v不加 /( K3 U4 K3 f V' P
- server_name cncml.com
8 v9 Y4 k' N. R! k) R4 E% z0 R - location /data/ {
9 l i4 D6 ? W - proxy_pass http://127.0.0.1;7 n) d4 I& z4 t \* [1 `
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html' {, `5 s, p/ ]# _ d0 g
$ E J1 S$ g8 ?9 K; N" J
& x d- ?" x" @ d# V$ [+ _ |
|