管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发; D; `6 |$ u. K t( T J. Q
8 Z* l; i5 T* `) r6 e0 l本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
/ _& H4 q( }+ \2 I+ d& w2 h2 K$ f6 D. i) v9 }
将域名转发到本地端口/ ^& A; R a g" \! B+ p
首先介绍最常用的,将域名转发到本地另一个端口上- M* y/ C* c( k6 u( a% c
- server{
/ I5 N4 m2 d% J+ W8 k) J& d3 C9 u7 } - listen 80;: C/ z# R% M- `3 H6 g
- server_name tomcat.cncml.com;
8 X) N8 A5 l# H) [% J" y/ s - index index.php index.html index.htm;
& ~: M! P- e ^3 `4 D7 M1 X
: [( O: D, A6 G2 V' L9 v& S- location / {
& W4 H0 c% i5 S5 T( p - proxy_pass http://127.0.0.1:8080; # 转发规则
9 f) E; W% X6 v Q - proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求: {8 I, ]: Y G4 \
- proxy_set_header X-Real-IP $remote_addr;
4 g. n- Z- ^ t! z - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
! E+ z- j Y I+ \ - }2 M/ x2 E' F! A7 p
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口 J7 N) l$ w; Y5 P, J `
2 D+ `) Z( Q2 g& @$ q& d将域名转发到另一个域名
0 r3 O% u2 X2 C$ w: X" p( P' [* U- server{
7 A r2 ~/ ^- J# I; L4 E2 a6 y1 M - listen 80;
9 E7 y: A# R$ B" B8 [% m - server_name baidu.cncml.com;
% Q4 {+ w2 M/ C: m/ M' R - index index.php index.html index.htm;! I; S9 t% [ h* i
5 i3 `) c. a( F! c- location / {5 x6 k2 F9 {3 N$ C/ U0 J) C7 q
- proxy_pass http://www.baidu.com;
% ~7 |+ X5 @5 X+ q5 N1 r. F1 ~- b - proxy_set_header Host $proxy_host;
' v& G1 Z( ^* T" w z' B - proxy_set_header X-Real-IP $remote_addr; G! W# ]! Q& B* @! [/ ^
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;, q: ?9 X3 X( s: l/ N f2 P {, q" {
- }4 P) c: L" A) J) m
- }
复制代码 本地一个端口转发到另一个端口或另一个域名4 H k0 Q5 C- U- N
- server{$ E M, B/ ] p2 _0 Q* S1 z
- listen 80;
8 G8 ], ~ ?. b& C3 z - server_name 127.0.0.1; # 公网ip
* a' q4 p3 L5 Y# K7 V9 T - index index.php index.html index.htm;( L) i1 [/ n3 r# A6 \% ^
0 V1 \( C& l8 J1 f+ Q' K- location / {6 D% F! T+ S! V+ F* O( }
- proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
: I: r9 O! ^9 b4 F7 C1 f* ]! _ - proxy_set_header Host $proxy_host;
( y0 }0 K- W b: @" l% \( _ - proxy_set_header X-Real-IP $remote_addr;
$ ~$ n* @: H& R; z1 h2 R1 V5 ]- N - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
8 f8 i1 W9 T/ V2 C - }
: V ], X9 k, X- L% h: M/ c - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com. {- u5 ~' [! g* r) ^5 H
; u5 e( Z+ T4 w3 d% c+ f9 E加 / 与不加 /. \. N6 E# s/ } X
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
$ m8 Z# ]' D% Q- Y2 m& S! X& N5 j) d! P4 y. _& h/ U+ ^
例如& {) K8 |3 z; j
% Q3 ]+ A, y) [/ j0 ^9 g8 A; V加 /
& x/ _$ [( i" j" ]1 E: s3 E- server_name cncml.com
( S0 o" @! V5 _4 J - location /data/ {6 }2 ?# f( Z) ^( C& S3 m* Y) p: T( }
- proxy_pass http://127.0.0.1/;/ ]) r2 {; @9 c: C y! J
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
! \, O+ j* P; W# g7 J# G/ a' l7 b; O% \$ ~9 l: ^
不加 /3 y# l: q* v" {# I4 d+ ]
- server_name cncml.com7 x. {/ o$ k# w
- location /data/ {
. C1 l# v0 S5 R$ c5 r5 H - proxy_pass http://127.0.0.1;
- ~, Z) x. L/ ] - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
8 n3 ]: X+ Q7 i/ [" N: I" S1 D5 q5 |/ B6 T" M
6 p& Q0 p }. g' N) b, O- d2 ? |
|