管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
% v4 ?- L% D5 u$ t+ `1 K# {- n5 s8 i [0 L' q% e8 u$ m$ W. u6 P0 H
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则+ c7 ]5 Y0 Y6 Z9 s0 `1 [
9 Z4 _, u2 i1 X6 B) g: _
将域名转发到本地端口
6 k; ^4 R* O1 W& t4 ^0 C# v- r7 e/ M首先介绍最常用的,将域名转发到本地另一个端口上
) r; b. T4 Z) ~- server{- K; s% k- z4 p% w0 R/ V" a
- listen 80;
V. K- f8 ^! x7 M% Z7 H3 q- n8 \- j3 Y - server_name tomcat.cncml.com;- V: P7 M3 P1 h
- index index.php index.html index.htm;* Z* d" A# D0 t+ C3 B
- 4 s/ m1 ^7 A) d2 S( r+ Y
- location / {
! I2 A6 V( z8 N, i1 } k# g# V8 p - proxy_pass http://127.0.0.1:8080; # 转发规则8 s3 @0 J& n G3 ]
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求4 `3 N! |- k8 z9 {' [2 V
- proxy_set_header X-Real-IP $remote_addr;/ m: e6 I% y$ A$ j
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;! Y. W. n& P% D! z
- }0 j2 l4 ?# `5 J& K0 x7 n
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
' j4 Q' `4 D1 [- L+ o; f. V& G# q* H, f! b' K2 x
将域名转发到另一个域名: b0 X$ a3 W1 i1 C' \# \
- server{
" E# z% }& i! s) e3 ^ - listen 80;$ c$ i2 I g8 I3 v/ ?% _! p
- server_name baidu.cncml.com;
) E x, E" N3 N' x - index index.php index.html index.htm;6 Y6 P# Q! S r
$ T1 F. Z" u' i( Y5 k* H# u% G- location / {4 _$ F% y4 g& Q0 w2 J+ `$ p! \
- proxy_pass http://www.baidu.com;
3 v3 ~2 @9 c4 x - proxy_set_header Host $proxy_host;
6 u6 K3 J* C0 j: v. I( E& q - proxy_set_header X-Real-IP $remote_addr;$ r/ z/ W8 {! a5 A5 E9 t4 k& q! u! G
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;) N8 y. Z0 L# k) c5 O. s
- } l$ z4 W3 C* L. u
- }
复制代码 本地一个端口转发到另一个端口或另一个域名* {, K \0 P$ x3 t
- server{
4 G9 f+ p: w* R - listen 80;- `; q: Y' @2 ]
- server_name 127.0.0.1; # 公网ip
4 h# Z R) W2 h/ U - index index.php index.html index.htm;
; D+ d6 t- C9 H1 q - 5 {/ P8 ]/ a% `7 W1 x
- location / {- Z8 [& w. `) E( ?' k
- proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
1 G0 W+ m6 ` }5 x0 _ - proxy_set_header Host $proxy_host;1 ?% Y# _( a4 A1 |
- proxy_set_header X-Real-IP $remote_addr;
$ _8 V+ l# |4 S" d+ |' m - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;/ a4 V3 C# a! Z% y5 p
- }
M- s8 R7 k) H" X! I$ ^ - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
5 J3 I3 d/ _& z6 S2 L" c0 g# o# c2 A. D3 i
加 / 与不加 /5 t3 l+ f- s/ f J4 K" E
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径# H1 b X5 W. k3 ]' W
) [1 `) }0 ]0 [. N7 J
例如
- q4 \/ e& z+ X) g1 Z& S* C8 B7 p& w* ~" x
加 /
" V" l9 [2 d% Z4 r$ q( C5 h" a2 w' h- server_name cncml.com
: X P3 w. G& u1 e& N+ L - location /data/ {
7 c ^. r# F; d, q ^2 C - proxy_pass http://127.0.0.1/;8 ~! ]/ x: b1 m# P
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
* X8 e! C5 u9 B: |8 A2 ]. J
1 }+ A& J7 X# [! q不加 /- `) i9 o' q0 k5 C% Q% F' x9 Z1 m9 a
- server_name cncml.com) z. L- W4 F" C9 a; C8 G
- location /data/ {
! n$ Z. E* _$ R d - proxy_pass http://127.0.0.1;9 p3 R- N5 J5 \# A- l( F
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html5 t, p" z. t' e; u$ h
& {0 O N0 Y3 j0 b4 t5 a* g) Q" D
6 U, Z1 g/ C( Q# f g |
|