管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
: z# V1 ^; @5 Y4 G, Z8 M% l* F9 m0 h2 I& d7 B. E
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则# B3 E0 O. l: P1 U& p ?
! |- y! K- o2 M+ I x
将域名转发到本地端口( |+ @0 s& G& w: |
首先介绍最常用的,将域名转发到本地另一个端口上7 ~7 Q% ~# m" z- v$ w
- server{
9 s1 ?5 t: J) p9 Q% u: M! c( A* p0 N - listen 80;' `$ B8 M$ }6 L- N) u2 e
- server_name tomcat.cncml.com;
, ~0 f: M& d! a/ b0 d - index index.php index.html index.htm;( X. M. `. Z/ \7 F3 K% |
- 0 u3 ]* c! P/ ^* b y
- location / {6 [% Z( H! N1 l( [( F! k
- proxy_pass http://127.0.0.1:8080; # 转发规则: k9 w/ U5 }, {& A8 Z5 ^ Q: Z0 Y
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求8 K4 ]4 K u E
- proxy_set_header X-Real-IP $remote_addr;" b+ p0 X/ ~0 e5 o4 C& d7 f3 F
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
" l9 e' x% \, j - }
& y+ c3 ]! _% V - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口 O' N; d0 d# ]) X( }( k
1 S9 u: W. j+ z! R0 J将域名转发到另一个域名; L; Q1 s0 ~+ _0 d) f/ d/ W
- server{- e: r u0 u3 v; F- `
- listen 80;
7 x3 G9 G% G9 n6 [ - server_name baidu.cncml.com;
; G: v* q& h h8 A5 x; u3 o! |. l - index index.php index.html index.htm;- y+ P' P+ ^* a" l9 I5 v
- / N$ Y: A, A* p1 ~/ q% `7 S" |. g
- location / {
* G% s7 n; |9 U9 u - proxy_pass http://www.baidu.com;/ ]* d, d" s+ N
- proxy_set_header Host $proxy_host;4 {! N; A5 s% Q* T" [2 H9 g" s5 ?/ g
- proxy_set_header X-Real-IP $remote_addr;
* u6 `. J- `7 h% d F - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;( `' f; j8 X( f- S2 c
- }
; u0 `* o# o) q7 }4 `* ~# r$ N+ m% d - }
复制代码 本地一个端口转发到另一个端口或另一个域名
7 v+ H* l; }& D- L4 V1 h- server{
9 B: X" b6 q/ K3 ~0 W/ \) R - listen 80;1 ~) R4 H' }( i1 T
- server_name 127.0.0.1; # 公网ip( ]0 j" n7 Z. G
- index index.php index.html index.htm;
: u! U, @" G% l3 ~6 p4 h* C" h
5 y; B8 x; E8 t" ]. i6 y- location / {% K4 c+ ~$ J0 `! [5 o1 I* H' o
- proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com, g6 {* E- ?0 s, a
- proxy_set_header Host $proxy_host;
# d0 |4 t/ z# p9 B - proxy_set_header X-Real-IP $remote_addr;
0 g$ P- z+ a& N' W9 p+ ]& ? - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
8 o: N7 D/ B- W6 z% A - }. S: Q. V) ^! X: ]/ Z5 c4 e& R
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
) ?' [7 ?9 p& D: m
1 U! ]- R$ V, {$ H/ F" G; h4 |加 / 与不加 /- {* W; s9 l, n1 G1 i' M3 {3 V$ B
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径$ w' d7 K% u7 W/ F' M) ?, j3 X
# k* @3 h7 n, X8 X) t例如
7 V7 x0 n" p/ h! m" P6 p0 j/ a$ Y$ F, [1 l. J
加 /2 }( l- H3 D3 }6 q4 n! J4 w$ n8 _" Q
- server_name cncml.com
8 r# C8 I: y. e+ `4 S# S" E2 i0 e - location /data/ {# M9 [ z' l5 b5 N' \1 Q4 t8 U
- proxy_pass http://127.0.0.1/;8 T! Q7 X# K/ _! H* d8 f+ Y
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
% ?7 S$ O7 Z) C. R) T
8 F, X6 q" ~) |" V) Y不加 /
* N: \& x0 { o3 h# q- server_name cncml.com, S+ i6 z8 ^8 V) |0 L N) i8 n
- location /data/ {
) W2 ~, ^0 V* @3 ?- V6 y - proxy_pass http://127.0.0.1;3 e) L& p7 C) n. n; v
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
1 G8 l" M' W& B. n0 y9 M8 ]
4 v( \. O: I4 W6 T" V
& `: i2 L V3 q6 A* H |
|