管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发8 e7 m8 A1 ^4 l( I7 Q
; G6 l; F# O/ b0 C+ w本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
- m% H% V d5 `# A& O' j
+ r# D; A. [4 ]将域名转发到本地端口! Z2 L: w( q# J5 D* s
首先介绍最常用的,将域名转发到本地另一个端口上
7 H7 V+ F, q! s& y- i4 _- server{
: w6 y7 {0 y. V8 D! s( o - listen 80;
$ }! E7 Q; i+ m/ i' e8 J' m - server_name tomcat.cncml.com;$ V. w9 r& ^/ t, F
- index index.php index.html index.htm;6 ]1 M' f" W9 ]
6 N( \" ^7 `* V% ?- location / {
2 m. w( O5 Q. I& L2 ^3 m% E) d# M - proxy_pass http://127.0.0.1:8080; # 转发规则. n7 h2 B, v9 o! n
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
/ Z/ V/ t4 U. r - proxy_set_header X-Real-IP $remote_addr;& ^! T0 d9 j' o: h" d
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;8 K6 {2 @/ } U2 y% M s$ K
- }. _9 j6 K( m6 a3 S
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
$ U3 e9 \) u& M- j- ]2 m# B
& |" v7 e W3 A/ T将域名转发到另一个域名$ y/ U7 }. c9 G" C+ B( O4 A3 p
- server{4 i$ y* V5 i# s! `. S
- listen 80;
9 Y2 ^' |4 ^4 M3 S4 A# U - server_name baidu.cncml.com;2 G# q- f6 {1 F- W
- index index.php index.html index.htm;6 }$ y2 V# w( _3 c. t- |1 X2 N
- 6 {4 r* @ _, S0 `8 b
- location / {
# Y/ L* [7 W+ a - proxy_pass http://www.baidu.com;2 W- G( J: ?4 G+ b# X
- proxy_set_header Host $proxy_host;7 f1 |" L s2 G/ T F1 k* U
- proxy_set_header X-Real-IP $remote_addr;
0 i' @% ^, a2 E* i) C - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;" b6 X$ f6 n( m6 s
- }
, d; t* ^* E) k% ] - }
复制代码 本地一个端口转发到另一个端口或另一个域名
% J2 c: I$ y% w5 q- server{2 I; B m7 W+ Y% R3 O, p
- listen 80;, O( o4 }3 c+ {' W3 U3 a$ j
- server_name 127.0.0.1; # 公网ip( I6 z$ Q, U: H9 _1 f5 ~
- index index.php index.html index.htm;
* C; I7 ]7 |. k' S) O7 w
; c9 s+ p( R/ p) C3 |- location / {
* y1 c# h* W0 s# g# m1 k# W" Y - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com" ^; q# [- _1 w& J4 Y2 ~
- proxy_set_header Host $proxy_host;' ]) m! H; |) r6 {
- proxy_set_header X-Real-IP $remote_addr;
9 ]: ~, g. u2 Y" v: `, G - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;& C" p2 ^( a. m, Z3 K0 d% e1 D; E
- }
2 K; P9 U% ]7 u6 M7 { - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
, w2 K2 r# c2 ~! n, `3 e$ T
/ l' o8 f9 O4 ?- c6 D- z加 / 与不加 /
6 Z3 w% G* [' j- D; ~ k在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径/ R9 C7 o% C5 N
9 x: o7 O6 q u& r8 r# m6 k
例如
" w f7 f$ T0 \# `. j3 X$ P) y* f c" W2 k, r, B9 E
加 /; L# a4 ^% v: ~( f) N' n
- server_name cncml.com
# | x9 J5 o7 I - location /data/ {! Y$ H/ C) i! A# j, R' [4 A
- proxy_pass http://127.0.0.1/;
, t( B# z& P* s; }7 x& X6 h: n8 Z( g - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html6 [- I, \' \0 r
. P" y8 K& g: N2 x! l' m$ i' O0 B不加 /9 _( V" L8 }/ S' q% U9 m4 Y
- server_name cncml.com4 R+ M B( B9 y, s) E, H, D" i7 w- ]! W
- location /data/ {- o. E. M0 Y" q- g/ Y5 j
- proxy_pass http://127.0.0.1;
; X* @9 a+ {& p9 `' |4 A - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html/ a! e5 _/ Y, S/ B. K
, V4 p( x0 F4 W1 J& S
. `6 l g) u8 T! n8 T |
|