管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
5 r" L( u, O* Z u6 E+ M- }' ^6 M4 ^( I
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
! A |& y1 p: V T1 j& ?
. J, n1 L6 C4 P/ e9 u1 ?将域名转发到本地端口
; n v: c0 v$ P9 a+ _& V+ f- c首先介绍最常用的,将域名转发到本地另一个端口上2 k F6 D, e/ y! ~ j1 h: G ?2 d
- server{1 j7 W9 h. P5 Z& [, M0 c- a( t
- listen 80;
* Y$ b4 a# T( K V+ c - server_name tomcat.cncml.com;) C o9 |6 E; c7 d% K
- index index.php index.html index.htm;+ N& ]% V b: f+ u
- - b7 f% h9 x4 z: ]
- location / {
. X& @7 @9 C* d9 S* Y1 i - proxy_pass http://127.0.0.1:8080; # 转发规则" E' X1 y# H$ Q3 _) ]; _# s( [
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求( i" J: S6 w8 p; |8 F
- proxy_set_header X-Real-IP $remote_addr;7 ^+ Q; c: }2 U2 J/ [
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
. O' J# e8 _, X6 S5 w, t+ Y9 V - }
3 b& q1 l' j: ^9 x7 g - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
" w7 r. m" Q1 C5 H
$ M' I( d* h- f将域名转发到另一个域名
, _5 _5 I5 U! d, ^1 D- f- server{, e: g1 a2 L& x, s5 r+ H/ O
- listen 80;
6 F& ?% i8 C2 v4 { L5 U - server_name baidu.cncml.com;
. W: \" Q# Q% K! P6 o# S - index index.php index.html index.htm;4 P, \* |) w8 F& \( I8 }) C
- : f/ l) [; G3 V* `
- location / {
& p) b* a1 E; W }- p; Q/ o - proxy_pass http://www.baidu.com;
2 l7 K3 v" {4 F+ b - proxy_set_header Host $proxy_host;
; s! K9 o; K, i/ x4 q7 u. v - proxy_set_header X-Real-IP $remote_addr;: V* {: ?: m/ i; w5 I1 y- [
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
8 |+ N% b0 R) `# J) r - }
- ~4 L; T4 x B5 | - }
复制代码 本地一个端口转发到另一个端口或另一个域名+ x. k. z( Z4 K
- server{& o m3 p6 d# g0 J$ V8 E
- listen 80;1 C- ^5 |- r6 T4 D
- server_name 127.0.0.1; # 公网ip( e3 `5 g& h+ M V5 p
- index index.php index.html index.htm;
( o. M9 A4 v9 {. _( ^9 U8 N, ~
3 w+ a3 U( }9 D( g4 y" r6 f: J4 o0 _- location / {: ^9 t+ v9 A1 b" K: ^
- proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
& ]" L6 S/ F, W' U& i0 E" x$ H9 Y - proxy_set_header Host $proxy_host;0 @, M6 e8 U9 x
- proxy_set_header X-Real-IP $remote_addr;
/ u9 h, S, K2 H: y; f! ^ - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
. `8 f' y u- B8 S+ h [! G4 `0 ? - }
{* U* Z# r1 U$ H6 `6 t - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com& ~: k: r$ g1 f7 T$ ^3 K
! P3 {, U- p) {' a- j, z加 / 与不加 /- }5 R3 T: Z$ |
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径9 {* G; l' m/ p
' S& d8 s* s* ^" a. U例如. c& w& J* Y; _. a6 i7 B' r$ U
5 d$ ?) n, ^& T( Q2 J G: p加 /
$ a/ ~* n$ K: W: b, ~% I5 w6 R- server_name cncml.com$ k5 a- W( _' X( W' s( D
- location /data/ {! \5 T8 h$ m7 `- v& u
- proxy_pass http://127.0.0.1/;
' F2 p+ }& m) l5 Z8 p - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html0 Y2 d: E$ Q; s- y$ R
0 R. }3 d7 z4 v: S1 Z9 C1 m不加 /, Q: X' \$ M: a7 T9 {! b3 c+ w
- server_name cncml.com
/ O" q7 ?7 j/ g, x, q - location /data/ {( `1 x" W2 i1 ~. i/ F; N
- proxy_pass http://127.0.0.1;
% ~6 P- U% A! B3 ? - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
4 e) ^% R8 v4 R. o3 y' M1 \
. H7 U% z: b- P3 X
4 K* Z; G( {5 w! a! J R |
|