管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
" j5 R' `5 H; Q" j! L$ B( A
; S1 Z; N0 U# F( K/ g- M- S" d本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
. L0 j( |# B) Z* M0 e* d
% J' F8 M% t5 z9 m将域名转发到本地端口" y1 n. E9 {( P* G
首先介绍最常用的,将域名转发到本地另一个端口上( D! y/ v! g, _/ o
- server{
0 Q4 h0 J, K6 B - listen 80;
- u' i7 Z& O2 I0 b- w7 P/ Z. A - server_name tomcat.cncml.com;
0 R) D- q1 i9 x& m* O: E: W - index index.php index.html index.htm;: q7 W2 Y3 @' S) v5 _* D/ f i
' k6 |" [/ q* _3 t3 \( [- location / {
! q' W! T" Q: c* J' {2 ^# Y9 g - proxy_pass http://127.0.0.1:8080; # 转发规则
; Y( V) C2 g$ A x3 K$ e# q6 g - proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求: ~6 I. c$ g& u0 B. y
- proxy_set_header X-Real-IP $remote_addr;% Z! i8 m, i' E( N3 [
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
7 l5 Q( I1 X [* y - }
$ i1 X1 E2 f9 r( R! X( q3 W3 W! b - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
9 O% H1 j: t" S: R' n
2 i/ L% v6 B, ~* f将域名转发到另一个域名! n: S0 G$ [ K3 d7 m1 {
- server{
5 d& _# J+ D5 j# H. h7 H" k - listen 80;* C' t) E" ^; X# v
- server_name baidu.cncml.com;0 L7 Q, F1 a6 y
- index index.php index.html index.htm;* F0 @# |. E; T
* _- ?# h/ W9 w0 w% j* Q7 C% C- location / {& }# g, e! i: l5 D/ }' g
- proxy_pass http://www.baidu.com;
% c! d8 z7 Q/ C# z+ v6 v3 ]' U - proxy_set_header Host $proxy_host;& R6 ^- J& M3 U. b$ j( D
- proxy_set_header X-Real-IP $remote_addr;0 t' Z; R# L5 i A. N
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
4 q# w" G5 o4 }9 V! a5 Y$ Y - }5 I: F0 ]% R" s+ n5 h0 l! U
- }
复制代码 本地一个端口转发到另一个端口或另一个域名
7 w4 N! N2 w5 G' `% h U S" Q- server{# d# t5 s% \: y3 O7 H" u3 @
- listen 80;
+ s; f8 n! M5 i - server_name 127.0.0.1; # 公网ip
* `; C: w, l+ L" \5 k - index index.php index.html index.htm;
# ~4 m; d3 B' a! {
5 ]' w4 e4 O$ y# x# X/ ~- location / {
1 q% b) h1 F" W. H" |3 ^* o* N - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
& i0 B0 s( {0 d - proxy_set_header Host $proxy_host;
" g4 N- a9 [1 S. y' M8 C3 ? - proxy_set_header X-Real-IP $remote_addr;
4 m$ T3 d5 c* U+ P" Z - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
( h/ f- f H: d - }
0 j1 ] L; ?7 X8 K. M - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
. B! _2 b! m+ H+ x( n9 |) Q0 Y$ Y2 w) e/ B' K. _ U4 I
加 / 与不加 /& p- }, _" X# y: @ H, `
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
$ C4 O$ j/ o3 {2 M5 s6 ~* }" d) M7 t) R, G
例如
7 G3 j& A8 V) E) U1 u) k5 Y0 f2 B0 h4 J0 A" t2 a# c
加 /! g( c; c* a% i& E! ^5 x
- server_name cncml.com. n; j% a3 X' M$ V* N7 k, m" g
- location /data/ {
: m' C* ?& L- h4 k - proxy_pass http://127.0.0.1/;5 v' J$ ?. [3 ?: f
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html3 A, M! ?8 ^+ c+ D. Y0 U
: r) C {3 o. v4 \8 p4 t& n不加 /
/ j, `0 w- [" [& ]5 E- server_name cncml.com5 s- a7 W( P3 ^" p8 [# n) ]! y/ [
- location /data/ { Q/ w8 n+ Z7 _% o
- proxy_pass http://127.0.0.1;
$ b! ^) g- @5 U9 Y: h - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html; b0 c, y8 [5 w, d
5 q; y: W0 @2 C
: H7 L$ d& H! K
|
|