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