1. 程式人生 > >Nginx站點目錄及URL訪問控制

Nginx站點目錄及URL訪問控制

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

1.在web2.0時代,大多數網站都是以使用者為中心的,列如:bbs blog sns產品,這幾個產品都有幾個共同的特點,就是不但允許使用者傳送內容到伺服器中,還允許使用者傳送圖片甚至上傳附件到伺服器中,由於給使用者開了上傳的功能,因此給伺服器帶來很大的安全風險,防止被黑客鑽了空子。

2.下面將利用nginx配置禁止訪問上傳目錄下的php,shell,python等程式檔案,這樣即使上傳了木馬也無法執行。從而加強網站安全

配置如下:

通過配置location區塊。進行訪問限制

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程式的上面

location ~ .*\.(php|php5)?$

{

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

include fcgi.conf;

}

示範2 nginx下配置禁止訪問*.txt *.doc 檔案

location ~ * \.(txt|doc)$ {

if (-f $request_filename) {

root /data/www/www;

#rewrite 可以重定向到某個url

break ;

講解;訪問目錄下以txt和doc結尾的檔案,if 如果訪問的是請求的檔案型別。break ,跳出

示範3 禁止訪問制定目錄下的所有檔案和目錄

location ~ ^/(static)/ {

deny all ;

}

設定多個檔案的限制

location ~ ^/(static|date)/ {

deny all;

}

示範4 禁止訪問目錄並返回制定的http狀態碼

server {

listen 80;

server_name www.titi.com;

root /data/www/www;

index index.html index.htm;

access_log /app/logs/www.access.log main;

location /admin/ { reture 404 };

location /log/ { reture 403 };

}

需要注意的是root 網站根目錄的配置。以及location的設定

限制網站來源ip訪問

下面介紹如何使用ngx_http_access_module 限制網站來源ip訪問

案例環境 phpmyadmin 資料庫的web客戶端,內部開發人員使用

示範1:禁止某目錄讓外界訪問,但允許某ip訪問該目錄。且支援php解析:

location ~ ^/date/ {

allow 202.111.32.133;

deny all;

}

location ~ .*\.(php|php5)? {

fastcgi_pass 127.0.0.1:9200;

fastcgi_index index.php;

inculde fastcgi_params;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

}

示範2 :限制制定ip或網段

location / {

deny 192.168.1.1;

allow 192.168.1.0/24;

allow 10.1.1.0/16;

deny all;

}

企業問題案例,nginx做反向代理可以限制客戶端ip嗎?

可以,方法如下:

方法1:

if ( $remote_addr = 10.0.0.7){

return 403;

}

if ( $remote_addr = 218.32.34.31 ){

set $allow_access_root 'ture';

}

方法2:利用allow和deny只允許ip訪問:

location / {

root html/blog;

index index.php index.html index.htm;

allow 10.0.0.7;

deny all;

}

只允許10.0.0.7進行訪問

方法3 :只拒絕某些ip訪問

location / {

root html/blog;

index index.php index.html index.htm;

deny 10.0.0.7;

allow all ;

}

只拒絕10.0.0.7進行訪問

特別說明:deny一定要加一個ip,否則就會直接跳轉到403,不在往下執行了。如果403預設頁面實在同一個域名下,就會造成死迴圈。

關於allow的ip地址段,必須加上子網掩碼,如10.10.0.0/16

其中 24 代表255.255.255.0

16代表255.255.0.0

8 代表 255.0.0.0

示例:deny 192.168.1.1; 拒接192.168.1.1

allow 127.0.0.0/24; 允許本機所有

allow 192.168.0.0/16; 允許192.168.0.0 網段

allow 10.0.0.0/16; 允許10.0.0.0 網段

deny all; 允許所有

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

問題:如何配置nginx放置使用者通過ip訪問網站(惡意域名解析,相當於直接用ip訪問網站)

方法1:使用者訪問ip時,或者惡意解析域名時,收到501錯誤,

server {

listen 80 default_server;

server_name _;

reture 501;

}

直接報501錯誤

方法2;通過301永久跳轉到主頁

server {

listen 80 default_server;

server_name _;

rewrite ^(.*) http://blog.tiantian.com/$1 permanent;

}

方法3:發現某域名惡意解析到公司伺服器ip,在server欄位中新增以下

if ($host !~ ^www/.tiantian/.com$){

rewirte ^(.*) http://www.tiantian.com$1 permanent;

}

上面程式碼的意思是如果header資訊的host主機名欄位中非www.tiantian.com就301跳轉到www.tiantian.com