管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
8 u) u- n0 m5 _- x- w% e
* F5 n# v- n! ]6 P" Y2 }本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
: d; ^4 ~$ Z3 x2 R( C+ F( M
* W$ z9 d4 ?; T5 D+ ^; A9 D) X将域名转发到本地端口" C3 K5 {! J. `0 N9 o5 U9 a
首先介绍最常用的,将域名转发到本地另一个端口上+ W) O7 _: t5 D' C4 f) i; L
- server{; p- e. O+ F" r+ ~# h; R
- listen 80;
5 S7 P4 |. b6 _4 t - server_name tomcat.cncml.com;, p( |( ~& U6 G( F4 s2 [+ q5 q
- index index.php index.html index.htm;
2 I# X( p: u' Y' J4 K" G - 9 ?$ T$ }- @% }
- location / {
+ ^- @ U* Q7 T: W' E - proxy_pass http://127.0.0.1:8080; # 转发规则4 J% A/ w) ^% Y6 Y
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求; K9 _6 h9 L+ c3 i. s! R
- proxy_set_header X-Real-IP $remote_addr;
9 ]) o" D0 \8 O* x- q% q - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
\/ v- T# B; z( j$ u - }& ?) O- q0 [$ K! [
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口$ R$ P! b* }0 a" J
: D" p) @; O, X6 F
将域名转发到另一个域名" u I& _0 G6 |
- server{: |# d0 B1 J5 e, N U
- listen 80;
5 j; `' z" l& k9 ? - server_name baidu.cncml.com;/ v3 M2 j9 n. [* Y' r3 q# _/ m- y
- index index.php index.html index.htm;2 a8 k6 A% q8 s" M& [$ X! G. F
: I! J. C3 o- }! w/ N1 K0 q- location / {3 u' k+ N+ C' c% Z
- proxy_pass http://www.baidu.com;
8 V2 p0 x# [* l1 g - proxy_set_header Host $proxy_host;3 k# O; F+ P1 T N2 c
- proxy_set_header X-Real-IP $remote_addr;
6 u* \/ F' [9 m6 T2 |9 ~$ P' V - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; F+ W ?0 i' E- C4 _4 f
- }" r: J N; F/ @& m
- }
复制代码 本地一个端口转发到另一个端口或另一个域名
6 x/ m6 S( R5 y, _8 J& m+ I2 P- server{
' H6 Z Q/ w* n! @: F9 g - listen 80;( a2 L% ^$ m% j7 ~6 b3 j1 ~# U+ _
- server_name 127.0.0.1; # 公网ip3 c! s+ `: l( ^1 z
- index index.php index.html index.htm;
3 @0 d9 I: X" F; }% Z - - b8 O" _7 u2 M
- location / {) {5 m: x5 z! q1 }
- proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
8 V0 c1 ?, Y, O( d' o - proxy_set_header Host $proxy_host;/ F: b/ [, Q k
- proxy_set_header X-Real-IP $remote_addr;: J: i0 U, n" D' x, ?3 P
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
. c! y3 r+ z/ Y0 q - }1 h2 g9 Q( o- y" O N7 s% E
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com" J3 c. b8 j \
3 r7 J: a2 D# Q( D加 / 与不加 /
3 U+ y: N2 S3 L; j% ^) Y& `在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径1 S) d. k. r! G) W$ O# Q
, o: r6 y5 Z* n3 c例如
. E5 k/ ?8 B$ E& |- M. h7 W0 x8 I/ K8 q1 `: S5 ^* X6 M
加 /9 z0 ]) ^' w8 I0 f% y; [( f
- server_name cncml.com
4 O& U3 p6 V \& D - location /data/ {4 e- B2 J' N& L1 ~
- proxy_pass http://127.0.0.1/;
3 ^, x* `% b; `: p' L - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html! x% q2 d% [+ R* E
0 t' C( Z3 T* F, v. q m8 F不加 /
0 t% }0 A/ _0 w- server_name cncml.com, ^# I( _9 A! W! Z
- location /data/ {
8 M2 i% S7 Y# u( c2 E - proxy_pass http://127.0.0.1;
7 h3 O0 K7 |2 n: _& n1 L; v# U - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html" t6 f/ v3 ]8 ^" Y [1 a
3 o( j9 H) f; D W$ @6 K) b' e/ k: E* c: Q/ O" D% {: g- ]
|
|