管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发 o" ~3 @( b- W0 [% B% _
6 q4 ]; _4 R0 j5 W- Z- O本文中,我们介绍Nginx如何做端口转发,还有各种转发规则! s1 b) h$ I: \
) o6 S; b9 `; g# q( _4 |) l- R将域名转发到本地端口' h: N$ @# c$ O5 A: ~/ }. d
首先介绍最常用的,将域名转发到本地另一个端口上
) G. l) N( g; i5 g- R) d( C- server{$ c0 K6 K/ \; r# b1 Q
- listen 80;
. Y4 r+ ]% _3 ~. Q6 T; `6 k - server_name tomcat.cncml.com;+ q% m; C2 R* r. s0 D
- index index.php index.html index.htm;
& e* H- n+ j& u+ c6 g2 V, m
; _' i o- Q# O; o- location / {9 \6 ?9 X: x7 O ~
- proxy_pass http://127.0.0.1:8080; # 转发规则
) n2 V2 C9 X- W9 X8 T0 e - proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
3 z$ L8 P: [+ h$ Z5 i1 `& F. z& Z - proxy_set_header X-Real-IP $remote_addr;4 b3 m( P% `, @. J( h5 ?
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
( p6 P: D" W) ~, h; y5 g4 B - }" O, T+ I' z9 _1 z% z+ R
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
x+ }% C3 P+ K4 ? i# M/ }8 i4 ~; J1 _; w
将域名转发到另一个域名
6 k* q. ^1 v8 b# C& Z* t- server{
" u( r( i. P8 u2 K* ?4 n. N - listen 80;% W# q3 O9 q" x1 Y, t' C" [
- server_name baidu.cncml.com;
6 x1 z5 ` A3 ~ - index index.php index.html index.htm;
& Y* z2 U/ |) ^. {
+ ]$ P2 r3 y" i. n- location / {7 q% p7 [- B* G; B9 S
- proxy_pass http://www.baidu.com;
! r1 x6 I/ i+ V( k q - proxy_set_header Host $proxy_host;" O0 d8 {3 I. O5 M0 g" a0 ^
- proxy_set_header X-Real-IP $remote_addr;
9 y; U' }% l* B# a - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
Z) [3 N" v: z, }: E0 ^2 \ - }( y4 _4 ^3 _2 G2 @! Q
- }
复制代码 本地一个端口转发到另一个端口或另一个域名! a/ n) D% v3 H
- server{
! ^5 s; ]! h& l& T+ O; { - listen 80;9 H! z* A: r9 R# |' m6 W
- server_name 127.0.0.1; # 公网ip
0 u6 p: B( k! g7 w' q9 a8 y/ E7 E - index index.php index.html index.htm;
9 W! |0 ^! X& O2 D( ~7 a) q; m$ g N - ) Z6 f/ M% k$ m/ H/ b2 T, B
- location / {: v0 y5 L: ]/ Z% u* o& w3 o) X7 J
- proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
" R6 Z# S8 B# O# r( G - proxy_set_header Host $proxy_host;
/ V% p3 Y" f# R( Y( i3 P - proxy_set_header X-Real-IP $remote_addr;
2 z# u) E$ D2 I9 c - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ k9 f! A W) p0 P2 Q - }/ x5 N8 g. M' @3 s( ?3 j5 m
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com q" M ]! a2 Q4 M) g) C1 J: m
7 B$ `/ k2 ?7 D7 E9 l加 / 与不加 /1 ~$ O" \; V, u4 P3 l
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
/ v, q' o5 C4 y0 N, g4 v
$ L) u% H. D- W3 C7 F/ {例如
$ n7 s; g$ j$ e: |" T0 b3 W% Y0 u8 q# w
加 /3 U9 K8 s, P7 M, o1 j- A
- server_name cncml.com
6 ~- N$ r& |. j - location /data/ {
& r# c1 N0 U/ ^" N1 L M4 M - proxy_pass http://127.0.0.1/;+ M; f! b: F3 n& |. f
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
1 m. R* m8 l4 U3 D
, M! N/ D* v8 ] v8 M& K5 N0 q不加 /& f, N5 @0 I' Z8 ?+ k! G
- server_name cncml.com1 e: [1 o. r, L4 K/ P u7 Q
- location /data/ {7 n1 g6 m6 Y& C
- proxy_pass http://127.0.0.1;7 u1 n- x7 a4 y, \6 q' H+ t
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html: ~9 ?+ h5 @; j
1 p6 I ^3 ^4 R5 Q
/ P# l2 ]" G R1 ~6 j f |
|