找回密码
 立即注册
搜索
查看: 328|回复: 0

Nginx禁止直接通过IP地址访问网站

[复制链接]

991

主题

92

回帖

5万

积分

管理员

积分
55457
发表于 2023-2-22 15:50:17 | 显示全部楼层 |阅读模式
介绍下在nginx服务器禁止直接通过IP地址访问网站的方法,以避免别人恶意指向自己的IP,有需要的朋友参考下。
0 B  h# }; ^0 N6 j1 O( F& @+ s/ L4 J6 ~& U) C" b* n6 J$ t
有时会遇到很多的恶意IP攻击,在Nginx下可以禁止IP访问。
* z% D/ R) Y) T- A8 h  V
3 r6 {. y4 T  Y$ F1 H  LNginx的默认虚拟主机在用户通过IP访问,或通过未设置的域名访问,在server的设置里面添加这一行:
8 Q4 j7 S( |( T# o5 v5 Q; |
# \% x$ b' b' V7 W复制代码代码示例:
0 O# Z' _8 f$ s" T5 K3 }) o: Xlisten 80 default;
% R( ^8 r" o) V: X* M" d( E: Q 4 g5 Z. `# n! c0 t

2 Z8 m2 N  i' r4 d9 V! A后面的default参数表示这个是默认虚拟主机。
" o. e4 D. M( i' C2 v, t1 f0 q- n6 |; D+ T+ \" ^( z4 |! e, F
Nginx 禁止IP访问这个设置非常有用。
! n( I; T/ c. X/ z4 d
0 u+ }* I+ c: l比如别人通过ip或者未知域名访问你的网站时,希望禁止显示任何有效内容,可以给他返回500。) v* H9 G5 j+ M1 I+ @" v

& A7 o! u9 E+ C& G' W2 u8 e- `目前国内很多机房都要求网站主关闭空主机头,防止未备案的域名指向过来造成麻烦。- {# z% I2 _0 K% C' ?7 P( y' k# V$ q

  u4 H, A2 u: `设置:2 Z$ k% P. C9 G& o% Z. e
# K' m- A% S, O: k1 b( a
复制代码代码示例:' X8 S1 r4 o$ d$ }
server {  / p; |8 z, Q- V0 q
      listen 80 default;  
3 Q" \. h7 S; [" b- f, I. s( f      return 500;  
9 n- w& v3 ?( ?   }8 o* q3 f: S/ e) R( s2 D  ~8 J+ ]1 t# h
3 L( g6 ?7 C  ?9 M$ U
也可以把这些流量收集起来,导入到自己的网站,只要做以下跳转设置:% r1 ^/ F: g7 ~
% {$ o7 T" T$ J# {5 ]% D
复制代码代码示例:, a) w9 e2 V# U& K- p/ i
server {  
# ^6 M) i" J$ Q5 Y( E) H       listen 80 default;    `9 G) @8 P6 ], N' @) D8 ]8 n
       rewrite ^(.*) http://www.mydomain.com permanent;  
! K! r9 r3 q7 m% J4 t   }
4 n% M3 B% r- N$ y3 u% ]# s$ |, h9 x) C: H: _! r  C
按照如上设置后,确实不能通过IP访问服务器了,但是在应该用中出现当server_name后跟多个域名时,其中一个域名怎么都无法访问,设置如下:. K, m3 w3 S% u$ h/ I
; Y8 g6 q1 F7 n; u
复制代码代码示例:; I: [, G9 U9 v$ S! ^; r! z4 v  I
server  {  + p3 ~5 U# m) @& ^8 j% I0 d) O
        listen 80;  , F/ V  A5 g3 B, Q% b9 Q5 ]
        server_name www.example.com example.com   
+ L' b( n: f3 i) |6 N) |9 p   }: g" k+ A9 L5 s0 G& H

1 E- P6 y/ N& i7 O4 s# P5 k1 p0 j1 c. B+ j
没更改之前,通过server_name 中的www.example.com example.com均可访问服务器,加入Nginx 禁止IP访问的设置后,通过example.com无法访问服务器了,www.example.com可以访问,用 Nginx -t 检测配置文件会提示warning:! V; x; @" p" [4 G6 t
$ W. S& i8 Z+ ]
  [warn]: conflicting server name “example.com” on 0.0.0.0:80, 4 h! K+ l2 c/ C2 `2 l7 w9 S4 a
      ignored  
$ K8 q# W- O# `+ c, j   the configuration file /usr/local/Nginx/conf/
; N1 S' Q( `) X+ B8 a5 T- r: y      Nginx.conf syntax is ok  ( {# g3 ^" c( d! v1 {# \
   configuration file /usr/local/Nginx/conf/Nginx.
5 N  S- F0 ^' I0 ?      conf test is successful
2 d" [/ Y+ ^! [( P" Q9 q( ~
& j2 P- g2 J; w2 L* L, D5 n, x" K, A4 `
最后通过在listen 80 default;后再加server_name _;解决,形式如下:
% _- b( \3 T3 [. V9 `& e$ C0 e* \ " x4 I2 Q  I' V, |
复制代码代码示例:, ~* D& a2 _  i
#禁止IP访问  : r* a8 M* y- ]! \% @
server  {  
; i/ e7 U; M' w" a: ~0 I       listen 80 default;  
8 r1 J3 G! i" O       server_name _;  
4 b( m5 B  X/ M% k       server_name www.example.com example.com
* F6 l4 B6 b5 k" I$ |  ]       return 500;  
2 m- e4 `! x& M% M8 a& q} 4 L3 `3 B- c- ~2 n
$ t* x: A# j) f, R( E0 D
1 d$ }6 i. h( |! g* D8 b
这样,通过example.com就能访问服务器了。
* E2 R& G$ w8 F  B8 _, Y0 o% z3 i' a& E9 k: O/ D
以上介绍了nginx服务器中直接通过IP地址访问网站的方法,希望对大家有所帮助。
, h6 k: ^) x1 v; Z
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-8-5 10:22 AM , Processed in 0.081505 second(s), 23 queries .

Powered by xyh-moon X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表