管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
" p3 |" o. g( r0 x% r* j0 e9 P( b$ Y* }, [% b; u/ G8 u8 \/ m
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
$ G) W) ]0 l0 P! U6 K
% k0 H4 s+ v: t7 u: H! `" I2 R P0 X将域名转发到本地端口- a8 N2 ?0 v5 P5 F: P, p9 h' F
首先介绍最常用的,将域名转发到本地另一个端口上9 c3 f: k! ^8 I3 ^8 t
- server{3 C; O8 F: L0 T' u
- listen 80;
7 V: [4 A! K5 _5 ~/ W) r - server_name tomcat.cncml.com;8 A' [% ^! R: g! ?4 u9 h
- index index.php index.html index.htm;
9 N/ Y' Q1 I4 s# s
3 ?7 O' E6 m- j. m) Q- location / {
7 E5 c$ W7 Z) F9 @+ ? - proxy_pass http://127.0.0.1:8080; # 转发规则: v# n/ m7 D. ^+ t- r) Z3 ]0 h
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求% D" F) u& P f$ d% B3 Y' Z- {$ h! p" Y
- proxy_set_header X-Real-IP $remote_addr; ~: D( Y! X' k$ a3 L
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;7 K( F3 Q: T9 m4 k/ [0 O
- }; q8 p! x3 Q9 u$ Q* I
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口* ?3 f* x' i0 d
e7 U* {5 f1 I; i/ f- f
将域名转发到另一个域名
, O( d" b8 ? L! E# E* l- server{( T( |, Z+ p& c* _9 P# t7 R. D7 F
- listen 80;
# [& x: ~, C* P3 i" o& U - server_name baidu.cncml.com;
4 l. h- b" v/ Q( Z9 G% V# t - index index.php index.html index.htm;
) j4 V. Q1 ]+ W; w' u - : r5 ^, ]; J$ G3 m
- location / {
4 s3 G/ l$ s, p' w - proxy_pass http://www.baidu.com;
( j! s' H- L7 y' v" _" _ - proxy_set_header Host $proxy_host;
/ F9 e% \' M( c - proxy_set_header X-Real-IP $remote_addr;
6 M$ E6 M& @$ y. B- e; D) E2 N8 X! [ - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;+ _% K/ o: C1 {" C! k" |; [" N1 e
- }+ T0 y0 ]9 H$ ?8 C
- }
复制代码 本地一个端口转发到另一个端口或另一个域名4 G2 h; d0 X; ~& y. h: `) L: H+ G
- server{
& L# ^4 b6 y' u$ i - listen 80;4 F7 u: H& q4 Y5 X* M
- server_name 127.0.0.1; # 公网ip$ I1 O; V- V7 K. s2 i
- index index.php index.html index.htm;
, O! N$ C7 Y- a& S8 I$ }& X - % B4 }3 E# N @5 ?8 X! M9 T
- location / {
. _ `, p, J4 h& { - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com! j6 M+ P0 g- Z$ F% U- T. L1 h
- proxy_set_header Host $proxy_host;
, v: B* M, Y7 j0 v4 D% W/ G - proxy_set_header X-Real-IP $remote_addr;- X- w5 k* s3 x" v& U9 v. s
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;, M) z- |8 @+ U. m2 {
- }7 F1 j# ]; Y1 c5 Y+ b0 x p( h
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com: J _! I1 M2 s0 P
% B. J0 v3 T/ G/ Y5 \8 B加 / 与不加 /
/ `9 C3 Q8 n z8 ]6 T在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径" q' Z2 i- U/ n& e
7 Y2 T( P5 W0 A
例如/ ~2 X8 `; I/ j. y
# `; d- j# u9 N3 j& @) G: t
加 /
$ D( x, x5 |# h- K% D- server_name cncml.com
( |9 Z" X0 K% N2 A/ f, s9 N - location /data/ {, ]' W' u9 k# N' B
- proxy_pass http://127.0.0.1/;" [7 q1 v7 J T" `% g( z
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html9 v* G4 P: m, j6 `2 Z/ j
* l4 U$ B5 B: h8 y$ p* b- ^! E
不加 /
0 r5 Y* ~' s$ H$ P3 G2 |1 |- server_name cncml.com/ M5 c( g r) g5 ]1 h0 B5 I. D
- location /data/ {
7 V, @: _$ F: O7 j - proxy_pass http://127.0.0.1;- ^- W8 E* d# m* b7 d, ?
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html. \; ?& V7 J# O$ X
# d. h9 r, [% v8 I& N
$ K" l" A' N' b) I p: R7 [ |
|