管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
2 T( R) e; v9 T, c3 Y0 q) T$ d: j$ l7 p d) _/ \4 R% v' n
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则6 [7 a$ V9 [' v$ @
y3 {. U( B+ U6 Z7 S9 H将域名转发到本地端口
$ B7 t+ P( a) L- B6 j' B- s2 {! D首先介绍最常用的,将域名转发到本地另一个端口上
" f$ ~: W( F7 @6 t; S: ~- server{- |/ r8 K0 C2 U& P; y8 E. L$ s; e
- listen 80;/ W4 o7 I! Q7 ]5 c8 _
- server_name tomcat.cncml.com;
9 w8 n8 Z* f! l - index index.php index.html index.htm;. |. _7 o# p/ u# k' F# J) p8 z
' C2 m% g8 Q @- location / {5 ?* r% O, h) O4 ^0 @
- proxy_pass http://127.0.0.1:8080; # 转发规则
8 e- I$ e+ z6 N1 c& v, Z - proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求2 [% e7 s, E, x0 w. {% e
- proxy_set_header X-Real-IP $remote_addr;
- q6 h! i# z' h* @4 h* l7 c - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;2 _8 X2 F% z, d0 h
- }
2 A8 ?$ k* {6 j: U$ F - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
3 O! A* k$ [1 i* p3 c
5 q8 |$ V4 n* N: f7 S9 f( N将域名转发到另一个域名! G0 \) F8 n1 w# x, ?
- server{8 v* C7 R' z7 p0 ?) e
- listen 80;
( U4 J% _) r) v - server_name baidu.cncml.com;
0 x& ?/ Z2 R- c% |9 F - index index.php index.html index.htm;
* d5 @( `7 R6 U, r# s - " M- B: U* P% U2 `) ~7 p
- location / {
4 y3 b- }. s0 R( B6 E" m - proxy_pass http://www.baidu.com;/ L5 I, Q, j' }0 \* R
- proxy_set_header Host $proxy_host;3 m5 o8 k1 k4 ?
- proxy_set_header X-Real-IP $remote_addr;! ^' y- H& t+ h. U
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
0 r9 q9 z$ A; R5 r - }
, L a# F) F' I# D, M- X/ B4 A - }
复制代码 本地一个端口转发到另一个端口或另一个域名
& j% _- m0 G- p* H0 M& E- server{
1 J }+ i9 I/ a5 Q4 w: [ - listen 80;! e1 |) s' o3 b) l
- server_name 127.0.0.1; # 公网ip. G$ z/ X" \# L8 f" n2 y
- index index.php index.html index.htm;" S Q& W& o( W7 r6 w+ I6 y' m6 A
( Z+ ?. a% ]; y% W9 f! H- location / {
( G; A" q4 d' E2 A1 s9 a0 ?. o) d - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
6 s& j7 M1 q* |: Y0 Y% x - proxy_set_header Host $proxy_host;( u1 [1 L# e# m; }$ ^& h# w
- proxy_set_header X-Real-IP $remote_addr;
; Q! [$ U. x( B* N - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# J2 q; f% Z$ C: Z I/ n: }
- }* d9 e5 V m0 ]/ {
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
" s7 O1 T3 G3 q! R& B4 c* `- X, j. ~$ q8 Q/ ?/ U5 Z
加 / 与不加 /- ]+ O8 N* G+ v4 I- H
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
, e; y+ f/ `; l- J4 M4 b2 F \ n$ l/ {2 S" b
例如 r' o7 `: q3 l O8 k7 {
$ E) M1 {* r; j0 `
加 /
4 T( H5 U% X5 C+ v. a- server_name cncml.com) D+ }' |4 Z+ e5 G' i2 g9 G
- location /data/ {
$ _% W- W. u6 K" P1 L% X2 K - proxy_pass http://127.0.0.1/;
8 B/ x9 ?: T& ~2 y - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
9 k: @' K. P% R4 V
4 Z! c* u, S/ o7 [) A# Z( u: @, v不加 /
+ G7 I1 ~" X9 W' T% |( V+ g) o- server_name cncml.com
- b9 b: |8 f* T; j$ g4 |7 M - location /data/ {
Z2 q: i8 _8 a; p. \ - proxy_pass http://127.0.0.1;* Q S o, j3 E5 I# K
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
$ A9 f; V) v" y+ W7 p; ~* u* O! X ^2 }7 i8 p9 \* \
" q% U _, S/ f
|
|