Nginx防盜鏈、Nginx訪問控制、Nginx解析php相關配置、Nginx代理

一:Nginx防盜鏈

在 nginx.conf中的server部分中添加如下代碼
location ~ ^.+.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$ {
valid_referers none blocked server_names
.taobao.com .baidu.com .google.com .google.cn .soso.com ; // 對這些域名的網站不進行盜鏈。
if ($invalid_referer) {
#return 403;
rewrite ^/ http://www.example.com/nophoto.gif;
}
}
說明:如果前面配置中已經加了 location ~ ..(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
access_log off;
}
那麼會和這一部分重複,這時候上面的生效,所以,我們需要把兩者合在一起。如下:
location ~
^.+.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$
{
expires 30d;
valid_referers none blocked server_names .taobao.com .baidu.com .google.com .google.cn *.soso.com ; // 對這些域名的網站不進行盜鏈。
if ($invalid_referer) {
#return 403;
rewrite ^/ http://www.example.com/nophoto.gif;
}
access_log off;
}
說明:盜用我們圖片的人訪問這些圖片時會跳轉到源路徑,當然也可以直接顯示403,即return 403,後者更節省資源。

二:Nginx訪問控制

限制只讓某個ip訪問,加如下配置:
allow 192.168.1.101;
deny all;
禁止某個IP或者IP段訪問站點的設置方法,首先建立下面的配置文件放在nginx的conf
目錄下面,命名爲deny.ip
cat deny.ip
deny 192.168.1.11;
deny 192.168.1.123;
deny 10.0.1.0/24;
在對應的虛擬主機配置文件中加入:
include deny.ip;
重啓一下nginx的服務:
#/usr/local/nginx/sbin/nginx reload
deny.ip 的格式中也可以用 deny all;
如果你想實現這樣的應用,除了幾個 IP 外,其他全部拒絕,
那需要你在deny.ip 中這樣寫
allow 1.1.1.1;
allow 1.1.1.2;
deny all;
有時候會根據目錄來限制php解析:
location ~ .(diy|template|attachments|forumdata|attachment|image)/..php$
{
deny all;
}

三:Nginx解析php相關配置

配置nginx配置文件,使其能夠支持 php。
#vim /usr/local/nginx/conf/nginx.conf
找到
location = /50x.html {
root html;
}
在其後面新增如下配置:
location ~ .php$ {
root html;
fastcgi_pass unix:/tmp/php-fcgi.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
重新加載 /usr/local/nginx/sbin/nginx -s reload
創建測試文件:
#vim /usr/local/nginx/html/2.php
內容如下:
<?php
echo "test php scripts.";
?>
測試:
#curl localhost/2.php
test php scripts. [root@localhost nginx]#
顯示成這樣,才說明PHP 解析正常。

四:Nginx代理

#vim /usr/local/nginx/conf/vhosts/proxy.conf
加入如下內容:
server {
listen 80;
server_name aaa.com;

        location / {
            proxy_pass      http://2.2.2.2/;
            proxy_set_header Host   $host;
            proxy_set_header X-Real-IP      $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
                    #            access_log  /home/logs/aaa_access.log combined;
    }

說明:proxy_pass 後面跟要代理機器的ip。如果後端的機器有多臺,還可以用 upstream
來實現負載均衡,該部分知識點以後再詳細介紹,配置如下:
upstream bbb
{
server 1.2.3.1:80;
server 1.2.3.4:80;
}

server {
listen 80;
server_name bbb.com;

    location / {
            proxy_pass      http://bbb/;
            proxy_set_header Host   $host;
            proxy_set_header X-Real-IP      $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
            #           access_log  /home/logs/bb_access.log combined;

}

代理一個服務器上所有域名
首先在vhosts目錄下需要建立兩個文件,一個是servername 列表文件,一個是虛擬主機配置文件
兩個文件內容分別爲
(1) servername
server_name www.123.net.cn www.alsdjfl.com www.asdfa1.com; //就這麼簡單一行,當然這個server_name 還可以繼續添加的

(2) 虛擬主機配置文件
server {
listen 80;
include vhosts/servername; // 這裏的文件就是上邊那個servername列表文件
location / {
proxy_pass http://1.2.1.2/; //這裏就是需要做代理的服務器ip地址了
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
access_log /dev/null;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章