您尚未登录,请登录后浏览更多内容! 登录 | 立即注册

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8456|回复: 0

[centos] 用Nginx做端口转发(反向代理)

[复制链接]
发表于 2020-2-25 05:46:09 | 显示全部楼层 |阅读模式
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发3 Q8 r! w1 B: Z
5 C" \* F- T3 p& Y( Y
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
7 i6 X) d% u8 o/ i8 @9 e5 |+ r  R6 ^6 \' q* d1 k8 p
将域名转发到本地端口9 C$ E" N% a! R8 `2 }0 Z$ e5 `
首先介绍最常用的,将域名转发到本地另一个端口上
; H: C/ f; z( [) b5 u, a- O7 M
  1. server{5 X6 z0 C; Z$ H7 k) ~
  2.   listen 80;
    ( B7 G6 A* D2 f5 v% c+ A
  3.   server_name  tomcat.cncml.com;% ?; s& E* Q4 Z8 t& _
  4.   index  index.php index.html index.htm;8 q* {6 T0 O5 P* `! N
  5. 7 t0 Y. v  b  r5 s
  6.   location / {+ S8 {% k! {# u
  7.     proxy_pass  http://127.0.0.1:8080; # 转发规则+ e, O  ^. z7 H- H: h
  8.     proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
    ( a* p- E$ e& n5 |, A  i8 H4 g6 d2 Z
  9.     proxy_set_header X-Real-IP $remote_addr;
    " s: Q8 J( f$ J) O9 S) f1 N: O
  10.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;2 ^9 B' s  D0 |" i  R8 Q, D! _
  11.   }
    1 I5 n: F# E$ i, m0 n+ H1 D: z3 n
  12. }
复制代码
这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
$ f$ K  P8 X+ ^5 ?# m5 ~* h: r2 r; t- i$ r. T' H- B
将域名转发到另一个域名
( @, m( h6 }7 N1 W) v4 Q9 W
  1. server{
    + _+ B6 n  Y6 f/ g) N: x* {  b
  2.   listen 80;' e( O5 o9 Q( U
  3.   server_name  baidu.cncml.com;/ Y) H% l9 K# p; P9 r* Q
  4.   index  index.php index.html index.htm;
    * u$ ?: P' m' b  x

  5. / K% E3 g9 V' v: y( S
  6.   location / {7 M, V  X, |* L$ N
  7.     proxy_pass  http://www.baidu.com;
    ! R7 k, H, X) D% Z2 p
  8.     proxy_set_header Host $proxy_host;) A* l8 l, x; W1 q9 L
  9.     proxy_set_header X-Real-IP $remote_addr;: R# O  b* I4 a% ~
  10.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;1 a  R- J, m! M' ^" P) K% h/ e
  11.   }+ ]% a- l% A* s# t" t
  12. }
复制代码
[size=0.6]这样访问 http://baidu.cncml.com 时就会转发到 http://www.baidu.com
本地一个端口转发到另一个端口或另一个域名
6 J1 {; o* G' B; k& S1 U7 Y0 D
  1. server{! D, F+ r  ^4 R# G
  2.   listen 80;
    - m- W3 f! ~# @9 X$ C
  3.   server_name 127.0.0.1; # 公网ip
    . I, c/ @: i+ p0 b$ J6 Y
  4.   index  index.php index.html index.htm;
    ! u2 e/ z  S! r- @8 x% M7 v& d8 C

  5. ' Q" s4 X2 {* A) |+ s' ^
  6.   location / {
      k+ t' {( R4 D2 J
  7.     proxy_pass  http://127.0.0.1:8080; # 或 http://www.baidu.com
    % |6 G& h/ ~7 B# \
  8.     proxy_set_header Host $proxy_host;
    & T" Z; Q6 g5 P1 a! U) D1 a
  9.     proxy_set_header X-Real-IP $remote_addr;
    4 T( X3 o; i# g2 ?$ |
  10.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;) n& ]0 x1 k) c
  11.   }
    & P: G9 e4 s8 i. T0 `
  12. }
复制代码
这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
+ x! M/ f6 z3 f. |3 J! H0 |2 V  l. I: E$ K9 j- O
加 / 与不加 /7 f% {4 e0 R$ D
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
  \6 h" z5 c( b7 G0 z! l7 ]/ J9 ^/ R( J! G/ [8 x
例如* i! B: `/ G4 [4 d: D$ D- X
7 z0 i' i* r* W" d% j4 B
加 /
: a( t8 L0 G; }2 S
  1. server_name cncml.com
    ' v. U0 c) v5 E
  2. location /data/ {6 e' M4 {" }3 j- h/ P6 ^' `
  3. proxy_pass http://127.0.0.1/;) c+ S- k9 [" `1 M/ Q  j* C
  4. }
复制代码
访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html8 C- M; Y% @3 I6 x. b0 B) D8 V0 j: n

! j3 S1 y$ {  Z1 ^不加 /
. h. E5 `3 A% t8 t- L, V
  1. server_name cncml.com% L& X0 w0 r( u/ F- ~
  2. location /data/ {4 T1 M9 d4 Y3 x* i0 a) L9 E2 h
  3. proxy_pass http://127.0.0.1;
    + I4 [5 A) m% U3 e% h
  4. }
复制代码
访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
2 S7 {7 `4 @; J# _/ o& Q, R& @. {- y
2 S7 J! X1 D+ Q( G: U
游客,如果您要查看本帖隐藏内容请回复
/ y8 C, Z1 E0 y  P  {' P  L4 k
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-3-29 04:12 , Processed in 0.115797 second(s), 20 queries .

Copyright © 2001-2024 Powered by cncml! X3.2. Theme By cncml!