管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
; K3 P9 |( i5 t- _9 P! J8 Y2 `0 z |( F. y
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
, t7 I$ _$ x$ i' S! ]$ }4 O+ s6 _( s$ B- W2 d' V
将域名转发到本地端口
; ?+ v2 ]3 k- v2 L/ y: J/ g, q首先介绍最常用的,将域名转发到本地另一个端口上
& G& T& x5 j3 d. f) i, [- server{ r( m: a2 B( G) Z
- listen 80;
3 q7 p9 g& J3 ~3 X7 { - server_name tomcat.cncml.com;. P# ?7 B1 K* w3 C+ o
- index index.php index.html index.htm;
+ P* ~$ p+ E* [& ~# w& |! q7 ]
e k, J4 c6 L' K( F* Y& q- location / {6 b: h1 C( n# G1 d: Y( ~
- proxy_pass http://127.0.0.1:8080; # 转发规则9 S1 \( E$ s" T* q" p/ d' Q
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求7 O1 ]; }9 ?' u2 @/ }- ~% a: l- l( i
- proxy_set_header X-Real-IP $remote_addr;* B) F+ r4 D" ~0 P, j
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;/ y! l/ ?3 o0 S3 A# x
- }" w9 r6 `7 R* ^" Q0 a( d' t
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口& T9 T M# J1 _% `, g
0 h" p5 Z( `. N5 L
将域名转发到另一个域名 X! n) L# |+ [5 F) o9 j9 z6 K
- server{: f- @0 Y3 h1 d' x9 Q# N
- listen 80;
& T( |* B9 b4 d+ B6 f0 {4 K, k - server_name baidu.cncml.com;' l+ U8 f2 x# `7 ]/ x! [, o+ M; w- \
- index index.php index.html index.htm;- {- Y2 A1 O* L
- - W6 x1 _9 q# D) A6 ]+ T
- location / {' Z" ^9 l$ R* z2 G* l
- proxy_pass http://www.baidu.com;
1 M$ M; c! D/ m5 t. V - proxy_set_header Host $proxy_host;
7 b/ }4 Y0 X& @ - proxy_set_header X-Real-IP $remote_addr;! k0 `# \6 Y5 _3 c1 Z
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;" u0 y. r% x. |3 m8 L' u
- }
7 ^9 j# B" X2 v) U - }
复制代码 本地一个端口转发到另一个端口或另一个域名
" x# n# J% Y: x9 M2 k- server{
( v; { |8 v6 T3 m# X8 D' n - listen 80;. o" l3 ~0 v' ~+ _' U* I' Y! S
- server_name 127.0.0.1; # 公网ip1 @9 T+ C' w' H/ I
- index index.php index.html index.htm;! E; q% N% ~! l* j
- % F* e0 _3 a3 `8 P4 d$ W- H
- location / {
' r& D1 n$ c+ ~# w3 J& v - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com! A3 l& r3 a/ _2 G" n7 f/ q m
- proxy_set_header Host $proxy_host;; ~+ M# O3 { o" h8 a
- proxy_set_header X-Real-IP $remote_addr;
: |& T3 v& W5 W; `3 i8 g8 N - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;. K- D) c$ z$ N" Q
- }/ p) j- U% E- i) @$ O( ^
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com( Q7 p) b" X3 p, }
- o9 \6 C, ]9 X+ q$ |
加 / 与不加 /7 m0 t4 F2 U: v5 ~1 [7 f
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径, K! ]. v U1 _& z1 k1 i' P
* G2 ?8 y% ]& H6 n: g3 f
例如
9 Y. g3 J1 p, c7 \% m- i4 ]
- ^1 H- U8 j" z% C5 z加 /
6 J* W, |# v1 \+ o4 ~- server_name cncml.com
6 C$ O+ L/ T9 |8 U- L0 d0 ] - location /data/ {% I. X1 ?: B& p6 C0 B! A8 R
- proxy_pass http://127.0.0.1/;+ g, v9 a8 \$ U0 S2 q+ k5 [* |, ~
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html1 a, r% n0 S+ ?. h
7 b* _& [4 Z; B* ~5 r不加 /) \; S% p- {; O. S8 I: H: K# F
- server_name cncml.com
) r3 ~8 J2 f8 R& d* Q \ - location /data/ {3 B2 Q5 R- a' M
- proxy_pass http://127.0.0.1;! _4 q4 D. G6 M# g P6 X% P; }
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html; A% c7 g% {" m" y3 w# a# J
# i* E8 G6 A; b7 s9 Y6 V* P* J
3 E- S0 v% R) E( Y" V' R4 q1 s |
|