管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发) v/ p' S0 G; S, b" l; v& Z, z
% ^& v" Z# S+ g本文中,我们介绍Nginx如何做端口转发,还有各种转发规则1 j1 _* i/ }) W% K
- i$ y# r3 M7 i. Z+ o7 }9 `6 r将域名转发到本地端口 \# ?# p* s1 K
首先介绍最常用的,将域名转发到本地另一个端口上
8 \3 B' h! r7 C1 y$ l7 ^7 [1 n6 v+ X- server{
8 p" p7 G' f- G1 b/ _ - listen 80;
$ h1 x6 y6 }% S1 n' J" e) K - server_name tomcat.cncml.com;
% D! R& @: T5 u: ^- { - index index.php index.html index.htm;
+ _- x9 O4 z9 P* J - 5 @: q0 V3 B3 b
- location / {
/ F6 t1 L/ A# W- X+ z- v - proxy_pass http://127.0.0.1:8080; # 转发规则
- ]& S* x: {* V0 M* C5 t - proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求6 [$ n4 D7 v" K$ ^' U
- proxy_set_header X-Real-IP $remote_addr;
3 P. @% S! c1 E" w3 q" U5 Y - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
; m# f" `4 M5 _+ W$ W, ` - }# B& G3 V- V, V3 O- Q7 ~/ I. \' H
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口! W, R0 N/ _* _- V, t) K
2 y9 g- e" u6 c2 n将域名转发到另一个域名
" }" V& ?! d0 d, \' K) W0 V6 C5 x C- server{- _5 h$ F, H+ C1 v' `) D: M
- listen 80;) Z3 W& }9 L/ u4 Y
- server_name baidu.cncml.com;
1 G S0 T2 q* k, H4 w - index index.php index.html index.htm;
. p& P( ?5 I/ M, m - # u5 m' ^/ A1 j+ z
- location / {
" W0 e, x, p+ m. { - proxy_pass http://www.baidu.com;8 f$ m8 O5 m" ?; v8 B* p3 u9 R; d4 [
- proxy_set_header Host $proxy_host;) Y1 _& [/ t' v: |' N2 B" @% i
- proxy_set_header X-Real-IP $remote_addr;
( u% Z! ~* Z8 `/ n+ ~ - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
6 W# ^2 N6 _9 \6 l - }: H% x/ I* ]5 c w u1 ~
- }
复制代码 本地一个端口转发到另一个端口或另一个域名. j) G! ^& n4 s1 x/ G
- server{
( a( U c- q9 j - listen 80;
R- ~0 ?; {9 j - server_name 127.0.0.1; # 公网ip
9 M/ J& j; x0 ~* s% c - index index.php index.html index.htm;
L" W% F6 E" O4 e) x, a$ k( v% | - & T$ b1 D, ^/ L
- location / {
% T& T p" ~. r3 h% T( I7 B# z - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
! |0 W; ] U7 T- _$ W - proxy_set_header Host $proxy_host;
, J* X2 e+ @: o: ], k - proxy_set_header X-Real-IP $remote_addr;$ E, }: i4 X% [( q
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
1 p, A! h: U" M9 a0 b9 b/ v# j6 [ - }
" g# g; _' f5 a' z6 j2 S0 h% _ - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
6 C+ v: ^' D8 y3 p6 [
7 \5 ` U) Z1 ?# N: e7 a6 C加 / 与不加 /3 C! o6 J% E' o
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
2 n6 O. c6 u3 F, ?$ n( N, t/ y2 U0 h- m4 [8 o0 L/ Z9 X9 B# i3 a
例如+ R4 s! u" x% L, E; s
: ?$ `2 q. j7 X$ z: k. K7 A. }加 /
7 Q+ ]/ ^- r+ d# {1 m. U- server_name cncml.com$ W- a. N* e: D5 K" _" r! e
- location /data/ {) O' l; ~5 W! ^# ?) \3 W
- proxy_pass http://127.0.0.1/;
; e; u m* N/ s2 T0 d5 ^; f9 @ - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
5 i# Y' ^/ c+ @, M1 P% h# `" |$ @$ d) a& l, ~# m$ @/ V J1 l2 L. U
不加 /; \# v$ _0 @! h7 S; [0 |' ~+ z
- server_name cncml.com7 G) }5 a9 \ ?# g) V
- location /data/ {7 h2 B# E$ r3 N; l
- proxy_pass http://127.0.0.1;- Q g! X+ l+ }" Y
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
# _' T7 L) i" [. D/ Y. ~/ a) R
( S' [3 A& A; h8 ~$ Y' s
2 k& I) @6 [" I! R) W7 ^ |
|