管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发3 E7 J, h. S7 H* k0 E
: m& o j. C% b! u7 E% W& a本文中,我们介绍Nginx如何做端口转发,还有各种转发规则8 o3 q( A$ n b3 w) g
& q; C# j' ~1 C4 y$ u
将域名转发到本地端口
2 m6 `2 t0 k+ h Z首先介绍最常用的,将域名转发到本地另一个端口上1 J6 f k) }8 l9 T& Q% S
- server{ d3 j+ P; Y, v9 W0 V6 o G9 J1 ^
- listen 80;
7 P1 g! V9 q" f - server_name tomcat.cncml.com;
8 m$ @7 Y$ S; A& y8 @ b, R( G - index index.php index.html index.htm;5 n+ H* u" I! k. r: | o* v( t( ?
- $ d0 t( G" {; s* Y
- location / {
8 [- H/ _% Z7 t. p - proxy_pass http://127.0.0.1:8080; # 转发规则: ~: c5 {1 N2 H+ j
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求( I1 R% r' l( Y' g. ]
- proxy_set_header X-Real-IP $remote_addr;
( ~4 _ `" U. @ - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;& s" N1 r+ M+ j1 ~7 i1 Q% {: r6 m
- }( ^: h; {6 c& m; N$ H% y7 p
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
4 r. g, O! t5 u/ H
; p D1 @ t! K! R- l: ~" ]/ G将域名转发到另一个域名
! W4 O9 O* n. _* m2 T& L# B- server{
% I+ `! s8 u" Y0 w3 z# N - listen 80;
( S7 A3 E. i( b8 e& W% _, d - server_name baidu.cncml.com;
3 D: L! o+ U; t6 K9 v9 ] - index index.php index.html index.htm;) N5 g( ]$ }$ e+ b* G* F5 w4 |
; a* K9 F, X( a. {1 W- location / {
% d- [& ~5 P) L' Y) W7 [ - proxy_pass http://www.baidu.com;$ }6 D, c7 c; W* e/ h
- proxy_set_header Host $proxy_host;
E \+ |- U7 o! H6 u- {+ l" n - proxy_set_header X-Real-IP $remote_addr;' o/ q1 o4 @5 R0 ^+ n
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;9 s& \8 i6 N; q! [+ H
- }5 h: A( z2 z/ ^. ]$ T _$ o. x
- }
复制代码 本地一个端口转发到另一个端口或另一个域名
' Y/ B$ c& E* u( b* [5 X- server{
4 L7 S. d* U7 T4 f+ Y+ L - listen 80;9 y6 Y( O* |7 B
- server_name 127.0.0.1; # 公网ip$ J% V% X' e0 Q: V) j! D( Z
- index index.php index.html index.htm;6 l. J% j2 }+ C3 L
- . c" u2 O4 k& h% }
- location / {
% h% o$ ?1 K) d, n h4 D - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
4 D. p% L2 b6 ~0 Q0 I4 L/ I; @$ | - proxy_set_header Host $proxy_host;7 h1 j6 C. L5 @
- proxy_set_header X-Real-IP $remote_addr;: w8 A7 f' |6 _! m5 o
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
! ?1 s2 N6 m* I! b - }
" g- m, S0 y F3 B7 X! S. D - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
6 D! C2 o& L" a5 H9 a- i, G- E [ z _# v1 r, H
加 / 与不加 /, G5 t6 p f# _* t- {+ S W3 n
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径9 N% ~1 ~: n% @% w
0 j+ ]7 {' M) o8 x* f例如
- u# S5 O+ j! [, a9 s/ F6 O% F! w, s' W2 X
加 /8 H6 \/ S+ r+ m* i; M% S
- server_name cncml.com3 w3 @; x t( Z
- location /data/ {
7 X$ o( l4 q" y% r - proxy_pass http://127.0.0.1/;
4 }: Z8 m- h- t. r# {8 X# G+ } - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
* k2 r) j f) j& A+ o6 S/ d7 p5 F: H2 E. d1 F0 z. h
不加 // s& t7 {- \8 `6 v; ^% p
- server_name cncml.com
! M' i, L2 I+ ` K/ _ - location /data/ {
! b) t; S- F( i$ H8 H - proxy_pass http://127.0.0.1;& g2 J( A8 J0 y8 D. W5 [5 y
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
5 p4 a- M$ t; b& b, f5 n
! q. [( k V1 _$ X3 E/ t8 n# e# Z% [
|
|