管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发; r) D8 _& }! v& ~) n6 l- z
: k& ^& x0 I4 X( E9 f$ x3 c6 `+ V本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
' K8 F) }5 t* G! \( a
9 l1 }# a& X7 l0 H6 F" a: e将域名转发到本地端口
4 }* }6 w. y4 `7 ^& y首先介绍最常用的,将域名转发到本地另一个端口上
6 ]" P; } h; w) J' V6 L# S' \- server{$ c$ Y8 ]3 d' g2 y. e
- listen 80;, t4 G* X4 m- t) w+ o
- server_name tomcat.cncml.com;+ g$ k' N2 C9 m$ q+ h
- index index.php index.html index.htm;, P: J. z) M. l* l
- 4 v3 i" X& D, k8 `. z# I( i9 X0 b
- location / {
5 d \$ z8 U0 ]# O5 L/ W - proxy_pass http://127.0.0.1:8080; # 转发规则' j, D5 ]8 g; ^( ~4 I& K
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求% Q* b3 Q' k! K6 _# O/ q1 t
- proxy_set_header X-Real-IP $remote_addr;) J* p6 w2 N; Z' J7 r: ^0 ^2 Z9 u
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;, V3 {+ L0 @7 b% C0 T& L
- }, ]! x& K+ l* {0 @$ z' D6 K, m
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口' U2 n) E+ _; E; K+ w/ R! q
8 G0 a- x" e2 ?2 D# Y
将域名转发到另一个域名' }# a8 R# D' Z! _3 [+ K8 T7 h: ]5 ^
- server{
, G# }. l" I3 v5 Q7 q2 \* s, n* k - listen 80;
8 d. [) G/ h$ G. E( }9 ?% j - server_name baidu.cncml.com;
* x5 M9 f, b; _+ \0 @ - index index.php index.html index.htm;
% P* q( e* `! G) \( `7 w - 1 I9 B/ y8 x R3 h" u* {" x
- location / {
+ K: T. `3 Y/ Q v - proxy_pass http://www.baidu.com;# p; w6 j6 S) @, `3 ]6 c' U6 q! Q
- proxy_set_header Host $proxy_host;4 e+ n5 k% w2 H T8 I
- proxy_set_header X-Real-IP $remote_addr;
8 b7 i2 b; k+ V. e% X; s4 y% ~& P, w2 K - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;9 j. B3 e+ O4 S" X/ v
- }7 ^* d* C9 v$ J
- }
复制代码 本地一个端口转发到另一个端口或另一个域名3 }/ G& N" h, W2 M. N5 ?
- server{
" u8 n$ P' {8 c" U9 t - listen 80;( Q/ G8 l4 [$ q
- server_name 127.0.0.1; # 公网ip& e. E9 O1 }* ^. [* R
- index index.php index.html index.htm;
6 h3 R; R. o% H - 4 U* u3 G* m2 x
- location / {, w: @* j# @0 K$ ~
- proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com2 I8 W6 _3 R |
- proxy_set_header Host $proxy_host;0 t7 ^& m5 J, X
- proxy_set_header X-Real-IP $remote_addr;2 `+ _# `5 [/ h6 d2 Z" a
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
0 }3 K5 _# [/ `8 G5 L7 k - }
; D$ \+ F" }3 n/ E, ~% z8 ?# _ - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com. T# B; k( c5 x& H( {& f; V
8 V& u' r8 ~# w* @1 h/ T加 / 与不加 /3 r4 `% z$ i3 r6 M2 h
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
0 R1 _$ D6 H: Z% l6 R7 D% W( N1 D; U
例如
8 k2 }) n9 f6 h! e: v, m
' r' I1 M D" f' F" o8 T; _加 /
M' o. l1 s) v. Z- server_name cncml.com
/ u- `$ C6 g1 [ - location /data/ {
K) F# {( _& ?" Q9 ~( w2 _+ x, \, y# | - proxy_pass http://127.0.0.1/;- a# u/ ?7 X$ `0 H* j
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
; [; m, _1 h( y# y& o' g* x/ M4 d* h( u! J* ]! w, q! F
不加 /
1 m5 Z5 ] U$ E2 r- server_name cncml.com7 T4 L3 Y% q9 x; v: ^ X
- location /data/ {
5 f9 ^8 g$ A5 l, n. i3 o9 K* f - proxy_pass http://127.0.0.1;
, u' ?5 r0 V' }+ s - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html$ u$ t( }* N5 i4 ?9 z% l1 h
) B& B! y' L* b
" ^3 k1 n, J' c" S) q3 U
|
|