管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发8 _, M) F& M/ X
7 ?2 f, t% o7 F( s3 }2 W2 o9 C
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则( t* t' i: v6 _: k" c4 S, C
. ~6 e' e: P( m7 |( e6 f; n) c* q* s
将域名转发到本地端口
$ N0 o( D M2 B& B首先介绍最常用的,将域名转发到本地另一个端口上
' [ u* t% i. _/ x4 ~- server{
% Y3 `- R" Z4 ^) w, z - listen 80;
3 h: @: D; H, M8 q - server_name tomcat.cncml.com;
$ ~! `9 `+ ], `# F( { U/ N s - index index.php index.html index.htm;
" l/ |# D0 H# c4 {# B8 R i; K( A# R
+ b" V0 ?8 x" b; h4 b4 O- location / {
9 |+ [5 t0 g8 w1 u* h - proxy_pass http://127.0.0.1:8080; # 转发规则1 A% s8 W, c- ^/ g2 q2 S0 s1 i1 o# d
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求# C. N+ }! B. ~
- proxy_set_header X-Real-IP $remote_addr;
, E( ]3 V. J- K b6 A; E - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
: Z( ~$ r+ R; U0 w4 ^# N - }) \4 |; `5 }9 S- Y8 X, m7 I* R
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
1 m5 ^# Z: M( C' u [2 Z* h9 `; z8 F+ e
将域名转发到另一个域名
( ^/ f" g& O) U. |+ o) i0 ~, a- server{3 y" p7 q0 x @' q1 T9 E1 \* [$ n( K
- listen 80;% }6 b# M! |2 r: ~4 Q: I- \
- server_name baidu.cncml.com;
. |* D: m2 G8 }3 ]$ G - index index.php index.html index.htm;
) [# [4 e- l' U3 {6 [! Y
/ j" [% g/ m2 K# r- location / {4 W# d3 O* K8 I7 L
- proxy_pass http://www.baidu.com;3 E1 A, K! ^7 j, ~7 l S
- proxy_set_header Host $proxy_host;
/ o6 W: t! D, r" d* ~7 Q/ e - proxy_set_header X-Real-IP $remote_addr;
% `% s2 L+ P4 {) G8 T, P - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;3 V+ J7 M. S( _9 j- g
- }. |2 b( W2 X+ ]+ b
- }
复制代码 本地一个端口转发到另一个端口或另一个域名" m* m( g8 i6 M5 u; G- B4 e
- server{
$ S0 I; }1 h: Z- e3 U' H - listen 80;; G6 t3 {& C* M6 O5 z. [3 S* p
- server_name 127.0.0.1; # 公网ip& H/ F4 o, @5 H; p% M
- index index.php index.html index.htm;
; {2 h9 n# L8 I1 |6 A/ a# B5 H - 5 s. ~' I) q/ W& h5 L5 w5 K
- location / {
0 F* S8 b" y+ Z/ \8 ^+ c4 t1 a# \ - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com% d5 L6 w2 Z; g& S
- proxy_set_header Host $proxy_host;: L) I. k4 q) A( T
- proxy_set_header X-Real-IP $remote_addr;
4 Y# `, b8 K0 M1 r P8 N, X$ T5 L - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;/ ` N( o) T# a/ d: z, K
- }
+ E0 D/ S# @' e% S) u - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
3 m: ?! w# N/ o0 t7 r; P5 f$ ]" U& s% x e! k
加 / 与不加 /# a M( J+ r' |
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
( Y4 s7 }. B6 ~! O& M4 h
! a2 o( M1 O8 K% l$ C4 h例如: ]2 G k8 a) X% I0 I
5 I3 W5 K' s# K; l0 y) _
加 /
) H9 D( H/ g4 v- V" Z) E8 t7 f- server_name cncml.com3 w8 Y0 I! X" _" I
- location /data/ {; j4 z6 @0 y' p3 m7 A/ `5 X4 r
- proxy_pass http://127.0.0.1/;: W: [- c5 E# ^, E
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
. A2 s6 v; u5 i ]- ?
/ l" ~$ } h G- V不加 /
8 O( p" J1 n" h- g/ j8 q" L8 W- server_name cncml.com+ I$ ?0 A* F) k
- location /data/ {( b# ]" V# v6 [4 A; ]% N$ {) l
- proxy_pass http://127.0.0.1;
3 T7 Q% J; v6 C- J/ H% r+ t& S - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html: z. G, K$ C/ |6 F9 Q ]
% x* n- e- A d( a7 ~- I4 v; V7 n2 j* ~
, h b& q, X; J# T/ i* P' S; P, I5 K |
|