|
|
介绍下在nginx服务器禁止直接通过IP地址访问网站的方法,以避免别人恶意指向自己的IP,有需要的朋友参考下。
5 V, |. ] M! C7 P; [# g3 E6 C
$ R0 W6 N/ g5 |* C有时会遇到很多的恶意IP攻击,在Nginx下可以禁止IP访问。
- q/ G! I* r6 C1 i( u+ s4 U! ~. u
Nginx的默认虚拟主机在用户通过IP访问,或通过未设置的域名访问,在server的设置里面添加这一行:
+ T2 \9 x- o+ o/ a2 `( S4 n$ K7 ^
7 B0 E" l6 `0 h! K' d P; m复制代码代码示例:: g% I- y7 n2 D/ N+ Z: K/ i! m6 t
listen 80 default; 6 u# r, {( a0 J& H7 Z+ M
K3 ^/ H7 g9 C" d# ^- @
& _! G: g/ h, K( _# R- H* P后面的default参数表示这个是默认虚拟主机。
# T+ N1 G. B! [6 }7 q+ c5 ]9 H; _& o( D3 p
Nginx 禁止IP访问这个设置非常有用。- t2 O2 T6 h* T! X3 B/ C5 R
+ d% N, a2 i2 _+ G
比如别人通过ip或者未知域名访问你的网站时,希望禁止显示任何有效内容,可以给他返回500。+ j3 I- d5 k9 {8 U$ S; B/ `. d
( ^) y0 m9 u% h- w$ r9 d g% G
目前国内很多机房都要求网站主关闭空主机头,防止未备案的域名指向过来造成麻烦。& K. k6 n' M U
& c X: O! L1 C
设置:
1 r) z0 `: o% {7 \0 j$ N5 ^! O/ J $ ~/ r% t9 S" J8 l; S# Z& i5 p5 a
复制代码代码示例:- c' |1 k# e/ c6 i( \
server { " _% _9 s4 z; n* B) G! e
listen 80 default; ( ?% \" M, r; C+ ~
return 500;
3 `( R2 g+ }# F, s* R1 c% z }/ j _4 }( V2 Y" A9 h! J
0 G- n" x3 l; F- H5 s8 \
也可以把这些流量收集起来,导入到自己的网站,只要做以下跳转设置:" J, D% }7 x4 L/ c3 E- \
$ @6 B1 i# N* P5 e' o
复制代码代码示例:. T$ G' o7 Z2 \1 E2 \
server { 2 Y( E7 s. y8 y/ a2 L
listen 80 default;
( \, m* `+ l: O$ b- C. M rewrite ^(.*) http://www.mydomain.com permanent; ' u0 l7 k9 A& W3 l% O2 |
}! c" y7 i n" T* \! J
/ o2 Z( t2 f& N' I r9 x
按照如上设置后,确实不能通过IP访问服务器了,但是在应该用中出现当server_name后跟多个域名时,其中一个域名怎么都无法访问,设置如下:: e. ?2 A4 D8 f' x2 g, J
' {! @7 o7 T; i/ I, s4 H$ ?
复制代码代码示例:0 q+ _+ R! S3 a- t
server {
5 G3 J1 Y/ ?6 ?4 G: F3 A$ R* E listen 80; # M; |6 c" n- V$ D. S+ E
server_name www.example.com example.com $ h" t! t+ M- m; `8 ^, w/ T
}" y' O, q# I% y
& K% }; u- I3 _! ?) \- [
- _$ ~3 G9 o0 ~没更改之前,通过server_name 中的www.example.com example.com均可访问服务器,加入Nginx 禁止IP访问的设置后,通过example.com无法访问服务器了,www.example.com可以访问,用 Nginx -t 检测配置文件会提示warning:
! J+ \1 N2 b& \4 \& \ + q" X: N" Z( h* M: A: o3 Y
[warn]: conflicting server name “example.com” on 0.0.0.0:80,
2 p- j' S5 u8 n$ ]& O3 t) B ignored 8 e) u9 `% u* J- \1 B7 B/ U
the configuration file /usr/local/Nginx/conf/
$ U8 n7 X1 n. v; g3 ]' t9 R Nginx.conf syntax is ok 3 T: ], @- ]" d) P, N- `/ M
configuration file /usr/local/Nginx/conf/Nginx.) P( x* _$ L/ K p7 _& @
conf test is successful
, n9 X5 l; f% J" U7 M/ n: Z" y6 M
1 Q6 ]/ d9 x D0 u8 }% p0 n' F+ j/ w7 `
6 v% Y9 ^. A! z6 R( Q最后通过在listen 80 default;后再加server_name _;解决,形式如下:
6 l# X' U/ j% p B* B* E) ]/ J9 Z . d; C5 y" j) Y/ i
复制代码代码示例:
7 h5 S7 ^* _" ?, N6 [4 n5 _#禁止IP访问 W2 J% E9 L7 e, E8 g- X1 w
server {
8 R" J& ], N) @9 F3 A+ o listen 80 default; & U$ d @/ V2 q9 N/ U8 J9 i
server_name _; 6 |9 s: o6 v+ I! E- l
server_name www.example.com example.com
/ a$ w3 s& B) b- | return 500; 1 }$ O$ B: g' n$ H
} / W3 E! p& L/ v* q4 J7 V: z& B
; k' `. t/ I* G4 H) T+ W( ]1 O0 p: z8 ^/ U) u/ b4 s
这样,通过example.com就能访问服务器了。
, D G+ p7 e& j
" M' E7 {6 X* S! T4 m以上介绍了nginx服务器中直接通过IP地址访问网站的方法,希望对大家有所帮助。
" c: f0 f, f( Q6 L1 K" T) k# z |
|