管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发" k/ h! R, }' Q" a$ w
7 V w7 F. c" H) U) `) {1 {
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则; X* j. X; [1 @4 _$ k+ F( P
. {# R. z- |, O- D& \" ]% u- f
将域名转发到本地端口" \" W* {' p$ Q% O& T4 d% Q
首先介绍最常用的,将域名转发到本地另一个端口上
3 U# d, w$ x0 A. A6 q- server{" T, Q: n3 X& L4 B- P# v/ ?* P
- listen 80;7 s# z" {: j" L1 r9 {- [4 w
- server_name tomcat.cncml.com;1 Z% ?& t0 n9 Y
- index index.php index.html index.htm;
5 x* d! e1 r3 Z7 ~
; H9 o9 f0 w" [+ \) s6 @: E3 I3 y- location / {
: e( H" ?+ N& f9 X# S ] - proxy_pass http://127.0.0.1:8080; # 转发规则
5 e9 P1 J4 `) M/ l& Z - proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求& Y+ Q F( x1 P( S
- proxy_set_header X-Real-IP $remote_addr;
F) R1 a! D$ Y6 l% F - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
& i/ h0 d; K* g# h( i4 n - }' ?3 q' Z# w: J1 k
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口7 y) @2 s! p- w: i8 |. c, @- [
) } \6 H# U, U. m( N将域名转发到另一个域名; U/ H/ S5 e2 W6 a* [
- server{
! l! l& L! F, L8 _. L( f! _ - listen 80;
- }8 y' d+ c, \3 u - server_name baidu.cncml.com;
7 p* O; }3 M$ ?( y- z% p - index index.php index.html index.htm;
2 b' _/ h4 R1 l, c
, [* k2 E# P1 k- location / {1 ?, q+ e, a0 E8 ]- p- e6 D2 k
- proxy_pass http://www.baidu.com;
. v) C9 d F2 P2 {5 g6 c7 t - proxy_set_header Host $proxy_host;
2 J0 z9 l2 v4 E4 Y# C& i - proxy_set_header X-Real-IP $remote_addr;* m. C1 t! n% Q7 L
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
1 [9 K9 w$ G [$ b, G9 Z* @ - }
; e' O$ x4 M" |; l- W - }
复制代码 本地一个端口转发到另一个端口或另一个域名
6 X8 ~8 N% {1 g/ L& {% Z- server{
2 F; S: M I4 K0 L* v5 r - listen 80;% d2 M; K# [1 q ?7 A
- server_name 127.0.0.1; # 公网ip0 T8 M! |! g9 [9 ^5 E3 p
- index index.php index.html index.htm;1 g# C* _7 f# o3 s- f% H
- + L( N9 G" o6 J0 j c
- location / {
4 M4 u- Q" w# C - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
6 q& a7 E/ p, Z - proxy_set_header Host $proxy_host;
1 D' S( G* w7 G6 A& u& n9 i - proxy_set_header X-Real-IP $remote_addr;
, R" k( l: ^# r2 i - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;3 z% M1 U; c5 E) d. q
- }# _" w2 J4 t% i a
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
% { ~1 q5 [. d x5 \" d
% z" S" |: O4 S+ h8 G" H8 m加 / 与不加 /
: ?$ Z7 J, m* i# X1 w! ~ Z' Y, U在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径# u$ u( s6 V* J7 `0 `. i
' u1 b3 d8 w- Y4 b0 F0 S8 G" c
例如
1 d+ M+ d4 \" g, F8 r
* ]0 g$ n3 {9 l1 d U5 r$ j' M) N加 /- Y- I! d9 v3 M9 q( q( w
- server_name cncml.com
5 f) `7 Y; u3 U3 N& V; x% d$ O - location /data/ {! D) I7 P% O8 m- `1 s+ |5 X
- proxy_pass http://127.0.0.1/;
5 T& D a" w/ \2 w - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
, Q6 `4 z) B2 e8 J/ _
- p8 I- H( T- h1 \9 ?不加 /# I: _( @& v6 ^1 ?1 i
- server_name cncml.com) i- B6 c1 k& u. n3 c0 Z9 Z# T
- location /data/ {+ }) c* ?. v {2 d3 e- X: \
- proxy_pass http://127.0.0.1;; X0 f5 Q8 E, }( O- S* f
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
% \# `+ v7 `9 Z$ N9 ]" P! x- v" I% \: s5 C m
3 a0 d$ ~2 W3 ~6 N |
|