管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
? w9 W% m6 S: ]$ n& [6 q* G2 M1 B) t& }
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
4 _( e* t" l0 V$ x- O( i- ?/ r. K: y! G% X% l
将域名转发到本地端口
* ^ O+ \0 Y& |* ?' X) Z首先介绍最常用的,将域名转发到本地另一个端口上
/ A# F7 m8 c. a$ R- server{
3 U+ I+ Y: x( z) m- H$ i - listen 80;- o; W# a" O+ I$ _1 S# M L$ m( Y
- server_name tomcat.cncml.com;! M" Z" v% h8 t6 T
- index index.php index.html index.htm;& g+ s; i0 U. M! z9 D
- [$ q* _/ F1 ^: X1 m- location / {
7 O' g( z) ~6 J+ E9 ], Y# s$ q - proxy_pass http://127.0.0.1:8080; # 转发规则* w8 ]$ T4 G' x* R5 b, G" a4 c8 c5 B+ K
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
" ?0 @$ F3 N" j% r' D - proxy_set_header X-Real-IP $remote_addr;4 p- J- J* \* ]3 g9 d3 a
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;$ h+ w- H% {" I( c0 _( U
- }
! D7 q6 M k; [. o% v2 ` - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口; l' c8 A; u5 `# c0 u
' p3 Z$ t' O! z$ J) ]& E
将域名转发到另一个域名6 |. c( i4 w4 s3 B
- server{
, B/ N& C; l f" o% j' U - listen 80;
4 {, N* T- E* T4 i- P2 Z - server_name baidu.cncml.com;
1 A# H6 s; J: x - index index.php index.html index.htm;
! m2 P; Y" N8 M4 A2 W5 p
/ W/ M& \, }6 B0 I; B- location / {
9 K1 i7 Q0 X6 |7 g7 ^ - proxy_pass http://www.baidu.com;
' V2 J6 a% t0 f - proxy_set_header Host $proxy_host;
4 t; Y7 V% n; r0 M! ]9 @ - proxy_set_header X-Real-IP $remote_addr;: Q' u; D6 {1 M. c. v
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
: f2 @* I0 q; P2 c3 @ W" E- W - }
' l/ [/ x* P7 @) G, Y2 x3 c - }
复制代码 本地一个端口转发到另一个端口或另一个域名
! M6 u2 w7 |. z* X+ `- server{ ?& X) q) t& P4 e* P: B8 [& P
- listen 80;
' Y, \2 d5 Y8 G# X4 X3 I o% f - server_name 127.0.0.1; # 公网ip
% Y, C( f) s( p$ E! q2 o - index index.php index.html index.htm;
2 k# _; @9 `" B& ~1 Z - - d3 P. z% ^4 p/ t9 L
- location / {3 u" n9 s9 o$ l2 n/ d, y/ C. l
- proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com2 ?' v* p# r2 f+ r" h
- proxy_set_header Host $proxy_host;
4 }2 p2 H8 r# O& E' G5 ^ - proxy_set_header X-Real-IP $remote_addr;
! x: ? k& j. I1 d$ b2 |' | - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
: a9 R3 C4 s5 k0 D - }2 _1 T: |! B3 R! p- I+ P; T* T
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com9 u1 A0 I. q h, g4 X
, o7 e/ ]8 J$ Q# w* S3 w% i3 p4 K
加 / 与不加 /% ]0 k% i" n" {
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
' I" M5 u* X8 L- U% p
9 X+ r+ Y" \4 N例如: J2 k0 w7 ?* Z) o$ u( O9 f
8 J" V! t3 [0 C% \0 W7 M4 F/ B/ `
加 /8 n! x$ h7 j6 W* K) I5 g
- server_name cncml.com
. }, f1 j, _6 {: P7 B - location /data/ {
0 a# D a9 G U) x - proxy_pass http://127.0.0.1/;3 w: ^$ W8 C7 F" Q `' [
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
! m: x! M1 x n3 e0 G: K7 o) _9 C& d) O+ Q4 _; T9 I+ Z" S3 s* \% Z( J
不加 /
: {* ~0 L4 |" _. G: \( `- server_name cncml.com
, ~' q/ _. w: [+ |5 { - location /data/ {
2 u( \2 c" {' `' ~1 h" W V - proxy_pass http://127.0.0.1;; X$ `3 y" W3 P( A
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html# ~" z) Z0 v: i- ]0 o
F/ v {' e$ }
. i9 M. h( K' \* ~6 s* v7 i. b s |
|