管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发9 x) V: `! a$ o) \: [7 C
' X# ^7 H) S3 G% [3 O3 C本文中,我们介绍Nginx如何做端口转发,还有各种转发规则$ @8 G/ x$ l2 ]. f! r8 g8 A
6 \- X8 f( Y; W" [- @: k" H
将域名转发到本地端口' z0 u9 j3 w3 {2 r/ G- G0 l
首先介绍最常用的,将域名转发到本地另一个端口上
1 R5 p6 \# x3 X4 o1 g- server{ s7 p& W# [/ f+ X
- listen 80;$ E6 [( [8 ~) J! X3 U+ [
- server_name tomcat.cncml.com;
& q, ~" _& v7 f; p( }. ^ - index index.php index.html index.htm;
7 E" P! d- M1 f% \
4 G( U% M5 N% y a% [. k% l" c& k- location / {1 [. h5 _ W2 }4 h( f2 a0 o. {
- proxy_pass http://127.0.0.1:8080; # 转发规则6 S/ ]. A4 a- h5 Z
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
& d( B; w3 Y5 R) T( S& X7 N0 |5 w - proxy_set_header X-Real-IP $remote_addr;) M+ ]- h1 H; a# K
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
0 X5 t: ^0 W4 H, e. a' } - }
, x$ l* @; o: A+ e6 ?- k3 j8 t - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
) S3 |1 H% a ~9 x+ c( L/ P" R( ~1 M0 Y: l3 L( S
将域名转发到另一个域名
V# Y/ V- e5 H4 j0 q) |3 l- server{
# j7 [5 d8 U0 c7 n/ o4 z! W! s - listen 80;1 ~- r8 e- S$ h% S# Z+ a
- server_name baidu.cncml.com;5 N O# x, S4 M0 S% z
- index index.php index.html index.htm;2 O1 V+ W* g8 I& q0 X
. ~5 a# o. ^& d9 ?! y0 m- location / {$ m- o. z7 G: y) ]$ n# s
- proxy_pass http://www.baidu.com;
& L* C9 u" h+ W9 @3 R, J' Q4 u - proxy_set_header Host $proxy_host;
7 n2 L2 E9 @7 @ \( R J+ G5 C - proxy_set_header X-Real-IP $remote_addr;
3 ?2 E" L% p$ X# t - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
) P! b1 b2 B2 R, t: ^; c5 [0 f - }
0 u8 `2 g" D# B6 b' ?! d - }
复制代码 本地一个端口转发到另一个端口或另一个域名) {8 S1 `* t( w+ J& z$ H8 X
- server{
4 C% Z. d, W& K H - listen 80;
! H- f; u. [/ u: \0 s7 g - server_name 127.0.0.1; # 公网ip p: y0 A* L, C6 j- i1 _
- index index.php index.html index.htm;
+ _0 c, B q9 V
2 c! O- {9 D8 Q- location / {
. j% O% `+ a3 E+ e- k( e; t - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
5 V( \# M2 y2 | U - proxy_set_header Host $proxy_host;
6 m* \. E+ _8 q- H! C2 ~ - proxy_set_header X-Real-IP $remote_addr;) s9 l$ A5 _! o
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
' R0 D/ A/ n1 { - }" p+ y" d* \! [8 N5 L; _
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
9 a# b4 N$ s% j! p! A! V b5 ?& r$ W2 `7 C& w$ }8 n) b) w
加 / 与不加 /
, j) {" T% t/ k! h) n, `+ C在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
7 s9 h* Q, v2 H6 J- E% ^: V8 c, O1 O. [* b% i+ K7 f
例如3 h/ P: V' r1 ]
$ R) U' o! P0 u4 E
加 /3 N3 f: q. r- _- B9 t4 C
- server_name cncml.com
' U7 ]( O4 L3 ?8 T1 m7 \2 f - location /data/ {& I/ P6 j; _/ A# S0 U- c
- proxy_pass http://127.0.0.1/;
0 s# }9 t# v% b. N$ Z0 J - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html& ]5 O9 o* [5 N# N2 ~
/ |# M% U0 F: T- ? e
不加 /
& n" N( _/ E# M- server_name cncml.com
7 a( u- s0 R3 Z$ Y - location /data/ {6 ^4 z1 L9 I1 Q' W, ]4 i6 O. s3 R; w
- proxy_pass http://127.0.0.1;
5 J2 S3 _/ L( X! l- m6 o - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html; s( f8 A( i) c
5 n: q; _# o. F8 J- E3 x
9 V$ F9 y4 [1 n( } m4 G |
|