管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
/ x9 i; b0 q/ e7 `/ x+ N2 L6 R( \$ H( S9 q9 {
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
. M9 L- F* L# H/ i, q7 \
3 q1 N$ t) z. @0 w将域名转发到本地端口
1 [; t: _# b1 \ @; \8 B7 j% l首先介绍最常用的,将域名转发到本地另一个端口上
8 T! E8 q' s/ U" e1 n- server{
8 j$ z# d; a! K; o8 y$ b - listen 80;: o1 D, ^$ p- N! h U
- server_name tomcat.cncml.com;! \! N( i. J8 s2 B/ o: H( t
- index index.php index.html index.htm;
6 L p" S* x+ f/ y% u
& i4 t5 u/ t8 P. A+ w& i- location / {
& x1 B H1 J5 |3 A# F# i2 {; V% H - proxy_pass http://127.0.0.1:8080; # 转发规则
+ d7 T6 @# X) k# E% g5 b8 \- W3 E, v - proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
" ?: u! q e8 [! @ - proxy_set_header X-Real-IP $remote_addr;0 y, ~) R6 C& U# q0 n/ F
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
5 v' U" e2 I! b4 J' H - }( A( D3 h' H$ p: I4 k. `1 Q7 c+ y
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口& k: @) d/ N. L" L* s
8 a. O( C% q3 E( y* G2 y将域名转发到另一个域名
2 j6 O1 u7 y; ^' B- server{
( C( r5 H+ J O5 \ - listen 80;
: f9 P: a$ c2 E# d& g* Z' m- d - server_name baidu.cncml.com;7 x- ^. J. n" m' G% Q& r1 U
- index index.php index.html index.htm;
' a- X* n6 U0 k8 B
* E N1 s4 p% v6 m, J- location / {
Z4 N4 }! O$ ` - proxy_pass http://www.baidu.com;! Z! `3 E/ ^, {2 `% G: P* \
- proxy_set_header Host $proxy_host;/ t8 R# s {7 B/ M; `. f( H
- proxy_set_header X-Real-IP $remote_addr;
. v0 S' s6 T, W! c! }; j* @& z* T9 z - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
; o; C3 w7 \& f( m8 s6 b - }9 F M6 ^* j5 `: h8 q. t/ ^
- }
复制代码 本地一个端口转发到另一个端口或另一个域名( t+ s* R0 j# B. h. B
- server{
& {4 ]0 |" x1 g4 x; F. f1 F: j - listen 80;# U) ^# ~- g, B" [
- server_name 127.0.0.1; # 公网ip' c& b( B2 ]! {9 H% U
- index index.php index.html index.htm;
8 d/ N* ?- V" @) U9 u; R
7 j/ ^% \- K |3 O- location / {
4 {, G0 j. p. y9 Z" l - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
+ Q. I% g0 Q$ X5 r) {$ \ - proxy_set_header Host $proxy_host;
( m9 P, @1 V3 {& k - proxy_set_header X-Real-IP $remote_addr;: |6 G: d" ~) e
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;: ^" }+ w+ Y( F2 P( z" K
- }7 e% f8 c7 V- Y% m! e Y1 ?
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
3 F `) n6 O0 S' \+ [9 J! Q9 s% T% P+ ~! q# |! m0 H( N" e& A
加 / 与不加 /
* A/ Y1 Q" h. |. Y. I, `9 l5 P& K在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径: ~2 K( d! |" d o
' p% J" K- K+ N- L* }
例如
1 f4 H6 u3 I3 g% E) ]4 j! J: L: O. ]3 T6 O
加 /
6 g# x! R2 S. S5 b- u% D; a/ i- server_name cncml.com5 ^3 L D1 a3 t0 a7 _: E" _
- location /data/ {4 R2 s K# x4 Y' n# _
- proxy_pass http://127.0.0.1/;/ ]! f9 b0 N- b; l0 S
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html+ W6 q) T" M; I" P6 f
: k5 ^4 M( H& l* [不加 /
! N1 [6 o# Q" E9 v* h- server_name cncml.com8 R' t- E" i$ D, |
- location /data/ {, |- P8 Q- c, S5 f5 I" }
- proxy_pass http://127.0.0.1;
3 k. ~! G. O6 _, ^8 s4 p. o - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html& R- j0 ?7 e+ R' }: p
3 R, v$ a) {( X: C' Y, N2 p
0 Q- Z2 T8 F% ?) p. d |
|