|
|
介绍下在nginx服务器禁止直接通过IP地址访问网站的方法,以避免别人恶意指向自己的IP,有需要的朋友参考下。4 q! X8 C w% A: h8 D
8 i# N. t; w* ^4 b0 F4 B有时会遇到很多的恶意IP攻击,在Nginx下可以禁止IP访问。! L- E+ z% O4 O2 b6 c
5 L. s& x- t) @& L3 \
Nginx的默认虚拟主机在用户通过IP访问,或通过未设置的域名访问,在server的设置里面添加这一行:. P/ P8 N2 h1 g
7 v2 X* C' E' y0 z+ F
复制代码代码示例:
! Z( J4 T0 u0 p& j+ Y) \listen 80 default;
* m6 M' G q: Y3 x* q( H; o
3 L. _6 s0 n" i# u3 m
0 t# `+ U: [7 c; b后面的default参数表示这个是默认虚拟主机。
# I# p/ z' u% W0 g% M) ~) Q
6 q U) u: h4 f3 p4 dNginx 禁止IP访问这个设置非常有用。
& A6 A8 U( ^. T7 i! W0 I
0 z- y, {$ w' ~+ v. c比如别人通过ip或者未知域名访问你的网站时,希望禁止显示任何有效内容,可以给他返回500。9 o& U( _% A2 j7 x
# M% M4 p/ j# D3 g4 e
目前国内很多机房都要求网站主关闭空主机头,防止未备案的域名指向过来造成麻烦。3 p; F! D2 \* s4 p5 }8 h9 d4 p0 H0 W' s
& R: F& l! [. T0 V7 ^
设置:
: |4 d; h; t$ V 8 E: X/ u6 i% Y# b7 S( d' ?# ]
复制代码代码示例:
3 A6 ^4 f3 r; b! w* sserver { 5 C+ X8 A9 p! T
listen 80 default; & T0 L3 U0 `, z# ?8 S9 T/ j, h6 V
return 500; $ A! n, W7 r; ^2 h# t( j
}2 `: H2 L3 f# d$ k
; x+ y+ R3 Y' I3 s( g. x
也可以把这些流量收集起来,导入到自己的网站,只要做以下跳转设置:" C2 y8 e- ?$ p8 T1 W
! K. X/ ]# U0 l0 g" E
复制代码代码示例:
$ n. N1 F( Y: ^server {
^1 v) [3 ^4 d listen 80 default;
4 o' D1 F! W) F7 T rewrite ^(.*) http://www.mydomain.com permanent; + T. u+ j9 O+ ?4 d2 b" ^! ^
}- V' V9 M5 n& ]! T
# s, B9 P$ v% a8 r0 F
按照如上设置后,确实不能通过IP访问服务器了,但是在应该用中出现当server_name后跟多个域名时,其中一个域名怎么都无法访问,设置如下:; Q# A3 Q [3 R( d
# }1 b1 _6 N' P s- M. ~1 c; i5 S复制代码代码示例:, f! r2 P" m# T
server { ( `% r4 C! n( V8 T: _- U) h
listen 80; 8 w. y7 l+ Z: \& G M* @$ P
server_name www.example.com example.com + a1 \( z. @" k/ E& F1 H; Q
}2 _) A7 R& {" w/ e" c
) X) p. z2 _2 U/ @
, `* |) j* k7 d: b1 ]没更改之前,通过server_name 中的www.example.com example.com均可访问服务器,加入Nginx 禁止IP访问的设置后,通过example.com无法访问服务器了,www.example.com可以访问,用 Nginx -t 检测配置文件会提示warning:
9 q8 y2 @# d& \5 P' b5 { 3 l2 p& K1 G4 O* p# u: E1 v
[warn]: conflicting server name “example.com” on 0.0.0.0:80, & U# Z8 n u) S7 a
ignored
$ ^# U; x. j% j+ g ^ the configuration file /usr/local/Nginx/conf/
0 U- u8 O8 f; S, E% z Nginx.conf syntax is ok 2 g4 G5 G, \: _4 O6 ]' o
configuration file /usr/local/Nginx/conf/Nginx.3 |! n- D+ f4 y3 u
conf test is successful
- c) q1 B$ C+ {$ W8 e5 ^' ^
# @4 P# z5 v! _1 Z7 i
. u% V' k- E% r% V最后通过在listen 80 default;后再加server_name _;解决,形式如下:7 K/ u7 }3 D1 n" c
2 @4 V" r6 D& G1 ~+ P# Z复制代码代码示例:
! M/ Q; z+ [" h#禁止IP访问
9 c, j1 x" i6 S6 C2 z' n' Lserver { ; M) f* t8 P: }/ v0 z
listen 80 default;
" P% I3 f" A) a2 y/ Q( N server_name _; % d0 V+ `% m! j; _3 V5 f
server_name www.example.com example.com
! x. a/ f; u+ I/ `$ u return 500;
! I( G4 r$ m7 K K; S2 P}
2 T1 b+ P7 j @ z+ s % h; d: k5 A7 t/ a
" d% h: h- X8 b- B) f
这样,通过example.com就能访问服务器了。
; V' d% T+ Z. Z/ H5 K9 A% G$ _8 n ]: K5 S) o! Z; F& s+ b
以上介绍了nginx服务器中直接通过IP地址访问网站的方法,希望对大家有所帮助。
% p: \ a+ `0 X8 u1 B- { |
|