Nginx ("engine x") 是一個高性能的 HTTP 和反向代理服務器,也是一個 IMAP/POP3/SMTP 代理服務器。 Nginx 是由 Igor Sysoev 爲俄羅斯訪問量第二的 Rambler.ru 站點開發的,它已經在該站點運行超過兩年半了。Igor 將源代碼以類BSD許可證的形式發佈。 php
Nginx 超越 Apache 的高性能和穩定性,使得國內使用 Nginx 做爲 Web 服務器的網站也愈來愈多,其中包括新浪博客、新浪播客、網易新聞等門戶網站頻道,六間房、56.com等視頻分享網站,Discuz!官方論壇、水木社區等知名論壇,豆瓣、YUPOO相冊、海內SNS、迅雷在線等新興Web 2.0網站。css
1、常見的502問題解決html
nginx虛擬主機網站的配置文件裏的fastcgi_pass使用的socket和php-fpm.conf配置文件裏監聽的socket文件名不一樣。nginx
php-fpm的線程用完了apache
使用的socket文件的屬主和屬組和跑nginx線程的屬主屬組不一樣。vim
2、nginx用戶認證bash
咱們對www.test.com/admin.php作一個用戶認證服務器
vim /usr/local/nginx/conf/vhosts/test.conf 編輯虛擬主機的配置文件負載均衡
更改內容以下:紅色部分是增長的部分curl
server
{
listen 80;
server_name www.test.com;
index index.html index.htm index.php;
root /data/www;
location ~ .*admin\.php$ {
auth_basic "cct auth";
auth_basic_user_file /usr/local/nginx/conf/.htpasswd;
include fastcgi_params;
fastcgi_pass unix:/tmp/www.sock;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;
}
htpasswd -c /usr/local/nginx/conf/.htpasswd cct 創建密碼文件,指定用戶名cct和密碼
注意的是,htpasswd工具要先安裝apache,yum install -y httpd
3、域名跳轉
vim /usr/local/nginx/conf/vhosts/test.conf
加入如下內容
server_name www.test.com www.aaa.com www.bbb.com; #設定多個域名
if ($host != 'www.test.com')
{
rewrite ^/(.*)$ http://www.test.com/$1 permanent; #跳轉規則 跳轉的規則
}
4、不記錄指定文件類型日誌
vim /usr/local/nginx/conf/nginx.conf
log_format cct '$remote_addr $http_x_forwarded_for [$time_local]' #紅字部分能夠自定義
'$host "$request_uri" $status'
'"$http_referer" "$http_user_agent"';
在/usr/local/nginx/conf/vhosts/test.conf里加入
access_log /tmp/nginx_access.log cct; 紅字對應
下列加入虛擬主機配置文件裏
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ #限定.gif等文件的日誌
{
access_log off;
}
location ~ (static|cache) #限定帶有static和cache的日誌
{
access_log off;
}
5、日誌切割
和apache不一樣的是,nginx沒有apache同樣的工具作切割,須要編寫腳本實現。
在/usr/local/sbin下寫腳本
#!/bin/bash
dd=$(date -d '-1 day' +%F)
[ -d /tmp/nginx_log ] || mkdir /tmp/nginx_log
mv /tmp/nginx_access.log /tmp/nginx_log/$dd.log
/etc/init.d/nginx reload > /dev/null
6、配置靜態文件過時時間
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
access_log off;
expires 15d; #保存15天
}
location ~ \.(js|css)
{
access_log off;
expires 2h; #保存兩個小時
}
curl -x127.0.0.1:80 http://www.test.com/static/p_w_picpath/common/logo.png -I #測試圖片的max-age
7、配置防盜鏈
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|rar|zip|bz2|gz)$
{
access_log off;
expires 15d;
valid_referers none blocked *.test.com *.aaa.com ; #設置白名單
if($invalid_referer) #其他的返回403
{
return 403;
}
}
curl -e "http://www.test.com/" -I -x127.0.0.1:80 'http://www.test.com/static/p_w_picpath/common/logo.png' #返回200正常能夠調用
curl -e "http://www.baidu.com/" -I -x127.0.0.1:80 'http://www.test.com/static/p_w_picpath/common/logo.png' 返回403
curl -e指定referer時,要帶上http://
8、nginx訪問控制
能夠設置一些配置禁止一些ip的訪問
deny 127.0.0.1; #全局定義限制,location裏的是局部定義的。若是二者衝突,以location這種精確地優先,
location ~ .*admin\.php$ {
#auth_basic "cct auth";
#auth_basic_user_file /usr/local/nginx/conf/.htpasswd;
allow 127.0.0.1; 只容許127.0.0.1的訪問,其餘均拒絕
deny all;
include fastcgi_params;
fastcgi_pass unix:/tmp/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;
}
當定義了匹配對象的時候是優先匹配。 也就是越精準越優先。當沒有定義匹配對象的時候,是從上到下逐條匹配。
9、禁止指定user_agent
虛擬主機的配置文件里加入:
if ($http_user_agent ~* 'baidu|360|sohu') #禁止useragent爲baidu、360和sohu,~*表示不區分大小寫匹配
{
return 403;
}
location / 和 location ~ / 優先級是不同的。
結合這個文章研究一下吧 http://blog.itpub.net/27181165/viewspace-777202/
curl -A "baidu" -x127.0.0.1:80 www.test.com/forum.php -I 該命令指定百度爲user_agent,返回403
10、nginx代理
在vhosts目錄下,vim proxy.conf
upstream cct{ #自定義的
server 111.13.100.91:80; #對應www.baidu.com的兩個ip地址
server 111.13.100.92:80;
}
server{
listen 80;
server_name www.baidu.com;
location / {
proxy_pass http://cct/; #若只有一個IP地址,將cct替換成爲IP地址,再將upstream模塊去掉
proxy_set_header Host $host; #多個ip地址要把這一行加上,不然會出現502錯誤
#proxy_set_header X-Real-IP $remote_addr;
}
}
dig www.baidu.com 得到域名的多個IP地址
也能夠用nginx作簡單的負載均衡