管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
* x% A9 U3 s( q& ~) _2 G: z# k6 b( V' x, M D9 o& g% v) B5 h7 k
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则4 v1 N( D4 b+ S# E/ [! q
+ t4 F0 L8 c0 X) T$ E9 q' z
将域名转发到本地端口
0 W: m! h2 R* ?8 x首先介绍最常用的,将域名转发到本地另一个端口上$ a3 q) N3 l% o) h% i+ ]3 s4 |
- server{
$ l4 j) _2 O5 Z# Z5 P - listen 80; X* p, U6 V/ q3 b5 \" \
- server_name tomcat.cncml.com;; X& ^7 T0 s$ R3 T4 T
- index index.php index.html index.htm;
! X# W/ s4 ` l- d6 N4 Z
" J2 u3 d, b) P! d- r* ?) \( r! o- location / {& X1 C g5 Q/ n- K3 v( q8 B0 M
- proxy_pass http://127.0.0.1:8080; # 转发规则
7 e; ?' C/ Q4 y. W2 y - proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
& _" n8 h/ Q1 V) X& p2 x) Q' m$ x6 c - proxy_set_header X-Real-IP $remote_addr;5 U3 N2 ^/ S; M4 i# y; S6 ]: f! t; p
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
' K- p9 a1 h$ m - }9 {, H" s) w( B! C( z
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口! i# c _" {& E) k9 M5 A
8 A5 i" c* K. @0 L* J3 b6 l4 ~
将域名转发到另一个域名
& k) D0 O6 W$ q G) K6 d! Q* W- server{/ I0 k, ?' C0 [3 H/ F$ `7 s# P
- listen 80;
- E+ h0 r* Q, V3 P* D, ] - server_name baidu.cncml.com;
' s4 ^& T+ W) k! |7 [/ X6 \2 G( ~ - index index.php index.html index.htm;! e+ g' E. q0 s& ]8 c
- L* W2 K4 e* P; Y
- location / {
6 W) V% F+ B1 j X# `2 F - proxy_pass http://www.baidu.com;
! {! V3 b4 I9 u3 _ - proxy_set_header Host $proxy_host;# b, X* \3 Z0 V' Y& i" D j% p0 [
- proxy_set_header X-Real-IP $remote_addr;
5 V" i/ S4 H8 m- U - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
, D$ f( Y" p2 F! V0 t - }4 S) L( l( [5 Z V
- }
复制代码 本地一个端口转发到另一个端口或另一个域名
e$ ^( L/ {0 w: i. t5 @- server{" P$ Q! z: b( W1 t; ?" `) c+ A) d: \
- listen 80;
7 Y3 g Y- L+ T2 x5 y) |, Y$ e# g - server_name 127.0.0.1; # 公网ip1 z) ~$ R- J, w6 u9 _
- index index.php index.html index.htm;
; F9 g6 l7 d- x' x* {
# s# u, `8 P1 b% e0 F( m- location / {
; c+ M) g; T$ Y" j6 } - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com) w M5 A' Z; G1 o+ @
- proxy_set_header Host $proxy_host;
/ ]: @- `1 @1 l - proxy_set_header X-Real-IP $remote_addr;
+ z! e* I3 m; `8 k5 W. R$ ^ - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;3 \5 l: w! T% v
- }7 `: d+ q9 N" m7 {3 G
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com/ o3 W- r* T2 Z9 ]9 ^# r1 ^
6 p- W5 l; v7 F% T! d# @$ S加 / 与不加 /
' R; Z/ h* P! @! F在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径- @) s1 @! R. _; }# B0 c0 ]
) q( r z4 {' T e2 h* B例如
3 T" B" }+ v) ]% _& S' e2 D. k' P9 |. W
加 /
& L1 C5 n5 L+ o/ S; X- server_name cncml.com* t; X, r; @* R+ i
- location /data/ {
3 V" C: l0 H7 W6 X1 @3 q - proxy_pass http://127.0.0.1/;
( O/ \% c" x9 |. p/ [ - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
" L; e1 t: P% z& m! l7 P+ ~ |& ?, O e m( Q/ R! n% Q
不加 /
4 q& U' T5 E2 d; n- server_name cncml.com9 q" d) E1 e0 D# T4 a5 v# o% ^0 X
- location /data/ {' |) O; P7 p& y2 Y: m0 t5 U) b
- proxy_pass http://127.0.0.1;
/ c8 L; L* ]- L6 S - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html( g5 G' |$ Q+ x' c8 ^
) f2 M3 i# w7 X* S) F) y6 k
6 x3 A0 ]! `( W5 [7 a2 K
|
|