|
|
介绍下在nginx服务器禁止直接通过IP地址访问网站的方法,以避免别人恶意指向自己的IP,有需要的朋友参考下。4 @7 F/ O! P b1 [, O2 ]% v [
3 W/ r' s4 {- d: d
有时会遇到很多的恶意IP攻击,在Nginx下可以禁止IP访问。, o: S" K8 V. ~2 {8 T
. ]$ f' m# `7 F% @7 |; {- xNginx的默认虚拟主机在用户通过IP访问,或通过未设置的域名访问,在server的设置里面添加这一行:
' }7 t8 z5 h" p& a6 j * W8 ]5 I' t& @/ y& r, i6 s9 J
复制代码代码示例:: x) _# n1 N7 i p8 d
listen 80 default;
; q8 I: W1 t* x( a 3 P, @1 Q' c& r: ^% k- F- h+ e( k
# e5 f' j" l5 s% F% ~+ l% z后面的default参数表示这个是默认虚拟主机。
s6 x8 F0 ?3 N3 f2 k3 q& b5 j) _' ~: Z4 M
Nginx 禁止IP访问这个设置非常有用。
! d. d: A: U, k5 R0 H3 Q; a
5 b# W6 C/ C* `5 _: I比如别人通过ip或者未知域名访问你的网站时,希望禁止显示任何有效内容,可以给他返回500。
$ [( M |2 |4 c" j0 }
0 M9 n7 }$ s" J1 I! H& \+ [目前国内很多机房都要求网站主关闭空主机头,防止未备案的域名指向过来造成麻烦。
- s* k! B n+ [, B, r/ G" D: a8 B0 y% Z8 w
设置:8 r9 G' Y& ?3 V. H
" O) G3 a% C, S; b# X复制代码代码示例:* X" J7 k9 g- ~7 J
server { / I# ]+ B$ S: v
listen 80 default;
/ v F. E" ]8 F/ l# o" r. r- S2 I return 500;
8 ?& s p) }8 b }; V+ t* l$ l% j' E" Q5 h+ f8 \$ n
1 J& X& i( p$ r9 j. U: V. S
也可以把这些流量收集起来,导入到自己的网站,只要做以下跳转设置:% ?' f; ?8 {" x3 e- ~$ E4 r
7 }8 ~( l9 S' i3 V复制代码代码示例:
: N( B9 R9 { |. f" S6 cserver {
) _+ ?1 H( \1 M3 X1 s9 v3 Z listen 80 default;
: g9 o. k4 }5 s) h rewrite ^(.*) http://www.mydomain.com permanent; ' h& _- a3 h/ i! e5 H
}
3 r5 ^( }+ o( W$ \: i2 _
( D5 Q3 \6 x+ ?1 J6 p: {" g& T6 o按照如上设置后,确实不能通过IP访问服务器了,但是在应该用中出现当server_name后跟多个域名时,其中一个域名怎么都无法访问,设置如下:
) \) m0 V) q7 I7 s 7 N: Y# W2 M4 U$ M- N& Z
复制代码代码示例:2 O8 h& {( C# V! n, Q
server { ; q. D) q& K" k3 \$ l6 \- X
listen 80; 5 I, W% c2 M* J2 @! y7 h9 p
server_name www.example.com example.com * k9 ?6 X, F; I1 r
}
( e6 S" d; J! V$ w7 {
+ d$ T, R8 h& ~1 s) U/ _& P; u; m x N# i9 j. b* ?$ d
没更改之前,通过server_name 中的www.example.com example.com均可访问服务器,加入Nginx 禁止IP访问的设置后,通过example.com无法访问服务器了,www.example.com可以访问,用 Nginx -t 检测配置文件会提示warning:3 t/ W3 {: b7 Z6 s3 I6 k
; x5 ]& X' I% k. @, d; [. F' G [warn]: conflicting server name “example.com” on 0.0.0.0:80, 5 s q9 O: h* G: j
ignored 2 W5 |" {3 V9 \4 K. N' O
the configuration file /usr/local/Nginx/conf/
3 c: Q7 ^ F, V& ~+ T" N3 y) c Nginx.conf syntax is ok 7 S7 F G" K. h
configuration file /usr/local/Nginx/conf/Nginx.+ K) \$ ?. d' k/ D7 H! Y
conf test is successful
8 ^$ r5 |4 k0 d$ p
}" B4 D; x6 b7 T$ S5 J
) R7 G8 Q2 O& ?$ A' s最后通过在listen 80 default;后再加server_name _;解决,形式如下:
; e. q v" V( {8 x. ^
2 g$ U2 x3 i6 d复制代码代码示例:
0 B7 @9 x& K& q# R" p; J#禁止IP访问 2 ]: i$ l, ], J- B! X; ?! G
server { % h: N7 R6 p8 y0 {, N* D* b
listen 80 default;
8 Q* F! d2 h" W, B* a6 G server_name _;
6 \/ I. M+ J q% d5 X6 X2 @ server_name www.example.com example.com 6 e6 n4 Y: [1 Q) H z; p$ ?
return 500; % U% e; i: }0 y" k
} 9 U. S6 O+ v* o! J0 U! O, c7 T3 i
; P, ?; n# W4 M, Q
: F; ?" y2 o! f这样,通过example.com就能访问服务器了。, B5 Q4 P6 H8 z( P/ `2 U+ c" }
$ r1 y( m/ y+ z
以上介绍了nginx服务器中直接通过IP地址访问网站的方法,希望对大家有所帮助。. k3 e* Y6 m$ h% b0 S9 H
|
|