管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
- j2 y$ S! Z$ O# L! n |7 ?) K' F, d0 e5 H p; q
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
+ p7 S$ g. x4 Z7 [1 S H- s# a
: E2 A( ]' ^+ ]9 b( P9 U3 l$ J将域名转发到本地端口( G: e3 ?) b) M
首先介绍最常用的,将域名转发到本地另一个端口上6 y) E" j, }* [5 i" a
- server{) l' n3 F) A0 ^% O& K: I
- listen 80;9 O/ |# w; z) {4 n
- server_name tomcat.cncml.com;
* s$ W* Y. b M8 ?' c - index index.php index.html index.htm;3 u8 ^ p- M! u' z Z
6 U y N" ], Q. i- location / {1 _ J* L: R7 }7 k
- proxy_pass http://127.0.0.1:8080; # 转发规则) v* U6 [: R* D7 X2 b6 U
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求( X4 ^9 L y# ?
- proxy_set_header X-Real-IP $remote_addr;
5 L' n: e* A& J" r5 K. _' r - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
/ h, @- |2 T/ R: g% W - }! c7 h9 ]) }2 R
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口) O$ e# w! v7 e
9 f, N9 R% t7 F' [) G8 i将域名转发到另一个域名
" W# N! r; R6 R7 S4 E/ V; [# u: u- server{
5 I# y" T1 z. n" J) z: G - listen 80;7 y5 C7 A& {3 \- M
- server_name baidu.cncml.com;
0 {' @$ \) ~, @0 ?* g7 ` - index index.php index.html index.htm; p) q' k* S$ _* A" q/ a; c( ?; g6 _
- 2 i8 [* n5 ~4 _% _( Z% L
- location / {
9 u1 L: r5 L# O5 ]( v c - proxy_pass http://www.baidu.com;
' u' N- f# g. ?) H. Z - proxy_set_header Host $proxy_host;5 x2 E3 n) N7 P+ k$ Q
- proxy_set_header X-Real-IP $remote_addr;
6 n' W/ e' ]- R+ n0 F+ R+ R: h - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
4 s+ @0 J. p' }1 R0 k; k) W0 O - }
% n% i& c, U6 c/ [6 N* y - }
复制代码 本地一个端口转发到另一个端口或另一个域名
0 i% G& Z6 g# Q- server{0 r+ w- }5 Z( r/ n9 i$ u
- listen 80;- x6 H- S# a! J4 p& C. s! ~, |
- server_name 127.0.0.1; # 公网ip) b1 S/ x# A# j/ _
- index index.php index.html index.htm;
; j z( P' _ i4 i
; L: I! q+ X5 @7 G$ C- location / {
7 S% ]0 w; n; y. r7 [ - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
# Q8 N' z O& F3 g J - proxy_set_header Host $proxy_host;
8 C: P3 ]. s' p0 ?2 V - proxy_set_header X-Real-IP $remote_addr;. K0 C x+ v. q+ |
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ D: i X) J& y0 R( a - }7 }; i4 j, [8 W0 X3 P5 Q5 u+ N
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com4 S. B" @* ~8 f5 V
7 T( N3 [' L* ~
加 / 与不加 /1 H; |7 B8 ^0 b, g
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径6 |/ m+ L, J0 w# h$ \1 O& e; S4 A! ^% J! i
$ e9 K4 [! N' r
例如
1 w5 h; ]# Y/ l2 z7 S
! `6 a, V3 i4 b! B" k. E加 /- [4 C0 V6 O! c: }& ~
- server_name cncml.com
) G9 j b1 U1 M/ [7 }& Q - location /data/ {
; U$ F4 Z/ u# R: @3 o9 z - proxy_pass http://127.0.0.1/;
' F1 `( |, j; Z+ ^( D' v1 ]$ G - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
' L. k8 M" K" d3 Q/ u9 t( Y) u- t: S" w9 W; H! H. Y
不加 /* g( Q: l# K# o0 I9 t, g! X
- server_name cncml.com
' ?8 y& N2 Q7 }5 M6 s) w& e. S! R - location /data/ {
1 R6 o/ H, \$ p$ I! B - proxy_pass http://127.0.0.1;
. A# a; S! Z' p# P s - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html% J1 D! V( X& K: Z8 m* W
! {! C* ?- l2 Z8 V- r2 ~: f! c' E# w! o* B3 ^8 h
|
|