管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发- Z4 C" ?5 y5 J
7 e+ \' n6 r; B+ O
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
$ W- j) y0 C4 H; D8 `
1 r5 r. t! N6 a$ x0 R将域名转发到本地端口
+ X+ v( g# v9 _; l* J; p首先介绍最常用的,将域名转发到本地另一个端口上
1 ~' m( J$ |( M5 O( B. C5 ?- server{' l7 G# G& [/ U6 ]0 b8 C. g
- listen 80;
: L! Z9 r. k$ Y# r! E9 S - server_name tomcat.cncml.com;
- N2 y0 [' Y b7 Q - index index.php index.html index.htm;
( ^: v- M, w" x* F- c
. Q% j/ o7 q: j$ Y% [' M- location / {0 a2 A/ ~6 @- L, ^7 P& I
- proxy_pass http://127.0.0.1:8080; # 转发规则' D+ g! S1 e: g- P0 g7 o. T# @
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
0 G7 w9 V. o* @. I! d - proxy_set_header X-Real-IP $remote_addr;
' Z) {" E8 Z3 j6 w7 d - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
) o& X% L |3 Z* n$ N! T; N# Q - }
, J- @4 b! f% u; _ i - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
$ Q' V3 `1 N; a( V! l
4 c5 T t3 \: n将域名转发到另一个域名0 b# c! o% T$ v7 D0 K
- server{# f/ T+ U9 A/ n d4 Q4 D
- listen 80;" t5 u7 P/ z0 E) ]
- server_name baidu.cncml.com;/ q) K: {$ {; t
- index index.php index.html index.htm;
1 h* m7 i% K- W& _ - ; t* m% M- L( [
- location / {
% S9 ]5 s. J% }3 b; Z/ T - proxy_pass http://www.baidu.com;
* N* a- l; O% B5 v9 p4 h - proxy_set_header Host $proxy_host;
/ W0 [# q. G7 n3 d - proxy_set_header X-Real-IP $remote_addr;' k$ e" m p& X# B! l& I
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# j5 j, @1 e. ]- f; L+ I$ R - }. f7 ^( Q+ @" x
- }
复制代码 本地一个端口转发到另一个端口或另一个域名
/ W8 F/ {% J8 ~7 v- server{# E1 U L3 J; ?* k; U
- listen 80;2 U& X q" X7 E* m2 \ c' `
- server_name 127.0.0.1; # 公网ip
' ~0 q% r% [+ b1 g% N+ i - index index.php index.html index.htm;
! E6 {% j+ ]) g e1 [/ P) V
8 h ]3 y5 r+ z/ T3 d) m- location / {6 O. Q, N4 m) y( W, K( x- o
- proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com5 ?4 @! }, A" X* @ T6 \ M. H7 @
- proxy_set_header Host $proxy_host;
5 x- W4 U( A# t8 [8 C - proxy_set_header X-Real-IP $remote_addr;0 M; i" c) K# L% e' l; |$ P$ v2 e/ x
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
! Z9 H- Q( P2 j6 l - }$ N6 v5 p0 v! M% E: F' I+ j
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com9 N4 p9 F6 J* }% b1 o+ Y8 |& `7 K
+ M: G+ p6 b/ L7 \7 [$ J3 [, W
加 / 与不加 /
+ _3 ]6 I$ \% ^7 j8 d2 Z在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
" }' X* q* D' t; [. V+ D" {
% V5 C; [$ d! \. L. ^. b例如5 G$ l7 \( u, U9 k. d4 s5 e
( N0 c0 z. {8 ~& T. f
加 /
9 Z3 B8 \) z2 _5 M; [4 R, D- server_name cncml.com
% P0 A, h# f$ ^( ~, ~. ] - location /data/ {6 H8 X- Q$ j* [ h8 b5 [" X
- proxy_pass http://127.0.0.1/;
' V% e5 D6 P! T2 k6 Z: \, i - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
: R* ?: L+ I6 N d6 P% _9 q: `* w b$ P- J1 M
不加 /: D; K% c" t) h$ H9 m6 v. _9 I- B
- server_name cncml.com5 C5 O9 ]4 v/ Y/ T
- location /data/ {
; c; e9 J4 O! Y$ K8 {4 k - proxy_pass http://127.0.0.1;1 L! E3 k( X3 w8 s
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
( x% ]" l% H& X+ p" s; |
( k i3 A3 N2 U4 ]5 ~% z; G5 g* B" j6 Z8 x! S7 `3 c3 y) X7 K8 Q l0 u/ w
|
|