管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发* J$ c! i5 v, j ~# N g. i
5 o4 ]3 B" I) c. l2 K* r1 |# a1 v本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
0 h4 [5 W: D; e" d+ s) X2 v! ]* {
; `( v4 d# z* b, n _* k将域名转发到本地端口
+ d1 u q% `: [6 ~首先介绍最常用的,将域名转发到本地另一个端口上
2 l- e- p5 W0 p/ [- |( p0 n* g- server{. E0 s& T' |5 Y: W8 _
- listen 80;
# R! c2 K6 F, O- H% s - server_name tomcat.cncml.com;' H# y+ t6 t, T& O
- index index.php index.html index.htm;
4 {+ D K- m: O- { - 4 N9 g1 z+ G" p
- location / {4 r4 ~7 ~" _" _, k4 R1 _
- proxy_pass http://127.0.0.1:8080; # 转发规则! V2 c, S; o: U! V* ]4 r
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求2 r, h9 o5 _1 M
- proxy_set_header X-Real-IP $remote_addr;
6 h% L' D* H [0 X( u) S - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
( F) s% _) ^3 i! E4 _% t2 s - }
& s" w4 ~# y2 u7 @* u - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口# w6 @6 `2 ]2 N4 o6 Q
o" \$ p: I8 O L m3 S" w- x
将域名转发到另一个域名
) e) S3 i( q4 l- server{
( O$ C, ?" {+ v4 e3 G - listen 80;; {! M4 n* I2 {7 U* N
- server_name baidu.cncml.com;& ?9 N7 |. H ]- B) X `
- index index.php index.html index.htm;
8 X+ D! W( b9 _ - 4 H, g) Y- I- n; h/ K: N
- location / {
/ B: r& W3 Z# U9 N0 v7 ? V - proxy_pass http://www.baidu.com;. P4 R. x/ J. o
- proxy_set_header Host $proxy_host;
' m6 Y. K2 ~8 C* j& b z - proxy_set_header X-Real-IP $remote_addr;' Q5 k3 T, Z* |7 B
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;9 F: w1 R" Q! e$ X, ?& z5 B1 O
- }
! k, d$ f/ F1 z0 ^$ o J' j - }
复制代码 本地一个端口转发到另一个端口或另一个域名' T2 y) X, ]0 @5 {3 b% ]" S- j1 u
- server{ s1 }0 |% G, Z
- listen 80;: x, e. t2 L1 L# z
- server_name 127.0.0.1; # 公网ip5 i" E0 n2 I* t7 H
- index index.php index.html index.htm;
# C8 L9 s. Q2 ` A+ i' K7 E, Y( t! l
0 i W1 r( j6 n* }" k+ D3 r( t- location / {
) O( I2 k9 u3 Y' G& \ - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
4 `) W* Q7 ^( w& E0 \& ?5 r/ J - proxy_set_header Host $proxy_host;: F p% d9 a! J
- proxy_set_header X-Real-IP $remote_addr;3 }) B7 z5 S& i' F' [
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;0 a4 q; P& E- v. R
- }7 u( F- Z' V7 O8 {9 F
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
# d# D$ X( `) n6 T& w" f' r& U
( T8 D! w9 g2 j t! ~) T4 q9 K7 w加 / 与不加 /
& a% Z( o# y8 {在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
8 M% C9 p6 R$ R! T/ d9 ?" ^1 Q- g( X5 _2 x" x3 b- c
例如5 Q) K; x1 e# @* `- f2 _9 P6 T7 w( y
$ i+ R3 K5 ^7 s" k% ~- N8 f. Z9 Z# v加 /
, `5 f& G5 E( S& {- ?- server_name cncml.com* U) g% q( p8 L& s
- location /data/ {
* d9 W* [$ _- [; e2 i) A6 W. i - proxy_pass http://127.0.0.1/;
$ f2 U% ]4 i# Q- U6 _6 h3 q - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
$ L" {% f W# X1 ?9 d3 w5 ~$ V4 C" G5 @- D" d' z. N8 T: @" {. b9 k
不加 /
8 h+ j0 |8 x: a, U% W! W- server_name cncml.com$ @0 T) Q9 H3 n3 m5 Y
- location /data/ {& R1 V, F" G! @! g" ?
- proxy_pass http://127.0.0.1;' `$ v4 N# Q" X( p2 h: S' O
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
! S8 ~4 L( c0 [ d( F; |" }) {1 n( `: i
! ?+ t. i- f6 p' X. k1 d' I
|
|