一: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;
}