管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
4 m# A! {; c7 r/ F( |* f. P6 P. p) J! x' B1 |
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
7 }+ S8 L, c% H) b3 N0 m) R0 |; ~/ f9 o! h
将域名转发到本地端口
) E) C& m) u. |9 l首先介绍最常用的,将域名转发到本地另一个端口上
; `9 d8 q3 m, F. f5 Q. i, I- server{
3 O5 U. V7 L. { - listen 80;" Q; Y, p9 I$ a2 ~, r
- server_name tomcat.cncml.com;5 C9 n9 J9 o. Z4 E: K0 ~
- index index.php index.html index.htm;
( a$ k |; G% U4 }: ~" O) r2 B; F
6 C2 g r4 q5 Y- location / {4 q: [. d2 }/ E3 K% P- Q5 P# F
- proxy_pass http://127.0.0.1:8080; # 转发规则! t. N' k: U# b) W' @; v
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
8 h; x2 m/ J( b. _1 p - proxy_set_header X-Real-IP $remote_addr;# X8 f+ ^# u" ?1 x$ _9 T
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
: w7 l1 @8 S) X S6 I% W& g0 D - }
' N8 u# F0 k4 @0 X - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口& _, y$ d4 c# R
- E0 L) Z, \7 H" A* C9 c. y- F将域名转发到另一个域名) R/ N5 g0 s. s5 V2 s( _; U; [
- server{0 i% v, ~8 Z+ C( Q
- listen 80;9 U5 j4 [( B7 e) `" Y B2 T5 {4 d
- server_name baidu.cncml.com;
( x6 a, O# e5 P+ C - index index.php index.html index.htm;
t$ P2 ]! Q/ g0 j - : H4 O1 ?8 i8 s9 Q; a% ]7 t$ k
- location / {
& g3 m, R2 h1 P2 k. Z% `: } - proxy_pass http://www.baidu.com;
4 z$ I) [5 E8 `+ x$ P9 T. `; b - proxy_set_header Host $proxy_host;
2 h& {1 ?2 G y! ] J - proxy_set_header X-Real-IP $remote_addr; x8 U2 `# _( o! V7 P3 v
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;9 j/ D; r+ L [6 o s1 S
- }
, N. t5 x d0 x [+ O0 O, p! N' J5 g3 J - }
复制代码 本地一个端口转发到另一个端口或另一个域名
! X) k, y7 }7 D- server{3 \% H. L* f/ ]1 _
- listen 80;( p4 Z- a* I; O2 N8 l) r
- server_name 127.0.0.1; # 公网ip `, F, G; Z: r
- index index.php index.html index.htm;5 Z/ R+ x6 ]' v) Y R3 r5 X! b
- 3 ~! C9 W+ N- ^
- location / {
8 v: L* T L( `) v0 j; ] - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
" l- U" S- U3 M( J9 h- A8 [ - proxy_set_header Host $proxy_host;
; x& E" v) S1 y" w4 } - proxy_set_header X-Real-IP $remote_addr;0 L, ]! D" e& B! I* {
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
) L/ @( U4 n( b - }
* r& [, T; M$ ?9 }5 r; v+ B - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com$ |- t+ H3 N) X4 h d& [* ?
. U- K. T4 d1 f8 N0 @4 ]加 / 与不加 /8 F5 n& Q' w5 Z
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径. d& D& Y! v9 X/ |4 ] @
* j5 n' b: v3 F$ `! V0 {例如& B0 r2 I/ b& W0 Q% P- W0 G
8 Q9 s( z$ u* {3 }4 i" V加 /
; ?) j5 m& p) U9 X) ]+ k- server_name cncml.com
& }% O n j+ r4 z5 ? - location /data/ {& P' R9 E9 s# V6 }, e6 y7 T
- proxy_pass http://127.0.0.1/;" H; N6 b5 ~7 \8 u% |% R
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
' e4 f0 B" o \
( T+ J# b5 g/ H# E# a" [& n不加 /4 l: V( z' j8 a' @% O3 ~1 |
- server_name cncml.com
: ~: A2 C- [6 K: |+ v1 z - location /data/ {% t% O* y% B, r* ~7 @0 z0 T j
- proxy_pass http://127.0.0.1;5 p- _) y4 j5 c2 W) e
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html" N' b5 }% z, L& s- H' V
) b- a9 O3 {4 k6 |% ~+ _* c" u6 R5 x- L3 o0 \/ P! E
|
|