管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
( g) E8 q- h) {+ W
! e D3 a+ ?9 j5 ~本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
, B; r% I2 s! D3 o5 k$ p
# ^" a( v# E& O, a1 T将域名转发到本地端口" [5 o# ~1 }6 C
首先介绍最常用的,将域名转发到本地另一个端口上1 v3 O- V g* g2 R5 p
- server{
, P) w- g4 T8 }6 W7 R - listen 80;
. v* Y) ~' o3 l. T& e - server_name tomcat.cncml.com;3 K$ {( P2 Y9 L* E# S( I' m
- index index.php index.html index.htm;8 ^9 H+ t# S) v+ x. b- i; s2 q
' x, Q! U5 T O% M0 c" [- location / {: p7 B% z) ~# T% U
- proxy_pass http://127.0.0.1:8080; # 转发规则
$ p; P$ ?$ |2 d, K4 |- h - proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求; _) k/ V# `5 ` s! r
- proxy_set_header X-Real-IP $remote_addr;7 }; F+ P, G9 v3 K! P& k
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
3 Y. a2 r9 L4 D. h) H! o6 i - }$ m* x8 k: R0 ?' f' [
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口; M4 _: f$ N8 q" F# I6 \
; H" k" ^1 J7 F9 p7 Z3 B. C( L; a
将域名转发到另一个域名
4 Z3 \% A1 S$ I0 L8 y! h8 K- server{6 Q! T; x5 I% D D2 c4 r
- listen 80;5 \8 q0 H" \1 V6 G. w
- server_name baidu.cncml.com; C2 q! c$ }& G8 b8 `
- index index.php index.html index.htm;, ~+ Z y$ e9 i1 e _
- 2 y/ c5 E. S2 F2 E
- location / {! L0 P# u: x. b9 y6 f
- proxy_pass http://www.baidu.com;9 b( }$ S. R t U
- proxy_set_header Host $proxy_host;
2 |4 s- @0 F' m; }8 j - proxy_set_header X-Real-IP $remote_addr;
3 f$ W( i: T; x - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;6 z0 D% g' L3 E( d6 A1 q4 W7 e
- }
- L- G) B$ O1 U* y. R" U8 ^& d - }
复制代码 本地一个端口转发到另一个端口或另一个域名
/ S7 P) g) [% p3 l: x9 b8 D- server{
" F) v( ~8 ?3 g- q) {" b - listen 80;
C! a' P4 d: Z q1 ^( T1 F - server_name 127.0.0.1; # 公网ip
! L/ C U/ {; C+ o - index index.php index.html index.htm;
: ^* R& a7 [/ e% D - 1 X) u8 U* m3 I/ ~/ B9 B
- location / {4 J7 }" O. ~: @$ r. G
- proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
N9 a4 r( Y8 @/ F- ? - proxy_set_header Host $proxy_host;
! @7 i& D; [4 r& c$ a! j - proxy_set_header X-Real-IP $remote_addr;- s4 e6 ?/ [2 X: q% _# l% i
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
" p1 N& Z0 ^) v" c. `7 W" O - }5 [; u7 n9 r% s2 L* H4 p
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
( y% z9 H# J l4 n9 Z- y0 r% [! k6 o# f
加 / 与不加 /( Y* d: x* s% d/ S2 f L
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径7 |& d$ F, C0 X4 ^6 G9 o- z$ {
2 a9 ?$ v2 o+ Y& N例如) _; [! E- C$ ?) |: r
; E0 v6 e. T4 u4 O* x9 N1 u6 q$ x加 /
* V7 N: h. o$ N/ W4 g- server_name cncml.com
: B8 @+ F3 J2 |+ r% B - location /data/ {
: U+ p0 U. v8 J4 ^9 @ - proxy_pass http://127.0.0.1/;0 W' p0 Q G3 S, C! ^
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html3 I, E- X6 X, v' D
9 n8 V: {" c' O6 \$ N6 d
不加 /' Z9 L" R4 P) ]' U
- server_name cncml.com
$ {! c K" u# k8 P3 I9 k - location /data/ {
8 h$ v9 h# |9 c - proxy_pass http://127.0.0.1;
% w1 n# }: t; J; o) a - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
; G* M( w% r: f% ]$ x* R1 E' R. p* p! I! H0 _7 ^" ]3 c$ q
$ @ P- k3 F2 {* a( X
|
|