nginx 是如何禁止訪問php的

Weiwen發表於2022-11-24

nginx怎麼禁止訪問php?

nginx站點目錄及檔案URL訪問控制

一、根據副檔名限制程式和檔案訪問

利用nginx配置禁止訪問上傳資源目錄下的PHP、Shell、Perl、Python程式檔案。配置nginx,禁止解析指定目錄下的指定程式。

location ~ ^/images/.*.(php|php5|sh|pl|py)$
{
    deny all;
}

location ~ ^/static/.*.(php|php5|sh|pl|py)$
{
    deny all;
}

location ~ ^/data/(attachment|avatar).*.(php|php5)$
{
    deny all;
}

對上述目錄的限制必須寫在nginx處理PHP服務配置的前面,如下:放置在server標籤內:

server {
listen       80;
server_name  www.dmtest.com;
location / {
root   html;
index  index.php index.html index.htm;
}

location ~ ^/images/.*.(php|php5|sh|pl|py)$
{
    deny all;
}

location ~ ^/static/.*.(php|php5|sh|pl|py)$
{
    deny all;
}

location ~ ^/data/(attachment|avatar).*.(php|php5)$
{
    deny all;
}

......
......
}

nginx下配置禁止訪問.txt和.doc檔案配置如下:放置在server標籤內:

location ~* .(txt|doc)$ {
      if (-f $request_filename) {
      root /data/www/www;
      #rewrite ...    #可以重定向到某個URL;
      break;
      }
  }
  location ~* .(txt|doc)$ {
      root /data/www/www;
      deny all;
  }

二、禁止訪問指定目錄下的所有檔案和目錄

配置禁止黨文指定的單個或多個目錄。
禁止訪問單個目錄的命令如下:
放置在server標籤內:

location ~ ^/(static)/ {
    deny all;
}

location ~ ^/static {
    deny all;
}

禁止訪問多個目錄的配置如下:

location ~ ^/(static|js) {
    deny all;
}

禁止訪問目錄並返回指定的http狀態碼,配置如下:放置在server標籤內:

server {
listen       80;
server_name  www.dmtest.com;
location / {
    root   html;
    index  index.php index.html index.htm;
}
location /admin/ { return 404; }    #訪問admin目錄返回404;
location /templates/ { return 403; }  #訪問templates目錄返回403

location ~ ^/images/.*.(php|php5|sh|pl|py)$
{
    deny all;
}

作用:禁止訪問目錄下的指定檔案或者禁止訪問指定目錄下的所有內容。

三、限制網站來源IP訪問

禁止目錄讓外界訪問,但允許某IP訪問該目錄且支援PHP解析,配置如下:
在server標籤內配置如下:

location ~ ^/mysql_loging/ {
    allow 192.168.0.4;
    deny all;
}

location ~ .*.(php|php5)?$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
}

說明:該配置只允許192.168.0.4IP訪問mysql_loging目錄限制IP或IP段訪問,配置如下:新增在server標籤內:

location / {
    deny 192.168.0.4;
    allow 192.168.1.0/16;
    allow 10.0.0.0/24;
    deny all;
}

說明:此限制是對某些IP做整個網站的限制訪問。nginx做反向代理的時候也可以限制客戶端IP,具體如下:方法1:使用if來控制,配置如下:

if ( $remoteaddr = 10.0.0.7 ) {
    return 403;
}

if ( $remoteaddr = 218.247.17.130 ) {
    set $allow_access_root 'ture';
}

方法2:利用deny和allow只允許IP訪問,配置如下:

location / {
    root html/blog;
    index index.php index.html index.htm;
    allow 10.0.0.7;
    deny all;
}

方法3:只拒絕某些IP訪問,配置如下:

location / {
    root html/blog;
    index indx.php index.html index.htm;
    deny 10.0.0.7;
    allow all;
}

注意事項:deny一定要加一個IP,否者會直接跳轉到403,不在往下執行了,如果403預設頁在同一域名下,會造成死迴圈訪問。對於allow的IP段,從允許訪問的段位從小到大排列,如127.0.0.0/24的下面才能是10.10.0.0/16,其中:

  • 24表示子網掩碼:255.255.255.0
  • 16表示子網掩碼:255.255.0.0
  • 8表示子網掩碼:255.0.0.0以deny all;
    結尾,表示除了上面允許的,其他的都禁止。如:
  • deny 192.168.1.1;
  • allow 127.0.0.0/24;
  • allow 192.168.0.0/16;
  • allow 10.10.0.0/8;
  • deny all;

四、配置nginx,禁止非法域名解析訪問企業網站

方法1:讓使用IP訪問網站的使用者,或惡意接卸域名的使用者,收到501錯誤,配置如下:

server {
listen 80 default_server;
server_name _;
return 501;
}

方法2:透過301跳轉主頁,配置如下:

server {
listen 80 default_server;
server_name _;
rewrite ^(.*) http://www.dmtest.com/$1 permanent;
}

方法3:發現某域名惡意解析到公司的伺服器IP,在server標籤裡新增以下程式碼即可,若有多個server要多處新增

if ($host !~ ^www/.dmtest/.com$) {
        rewrite ^(.*) http://www.dmtest.com.com$1 permanent;
}

本文轉自:juejin.cn/post/7169403058752290852

本作品採用《CC 協議》,轉載必須註明作者和本文連結
最美的不是下雨天,而是和你一起躲過的屋簷!

相關文章