1. 程式人生 > >web網站集群之企業級Nginx Web服務優化詳解(二)

web網站集群之企業級Nginx Web服務優化詳解(二)

監牢模式 優雅顯示 防盜鏈 非法解析

12 配置Nginx gzip壓縮實現性能優化

100k ---- 1s 90k

100k ---- 5s 10k

gzip on;

gzip_min_length 1k;

gzip_buffers 4 16k;

gzip_http_version 1.1;

gzip_comp_level 7;

gzip_types text/css text/xml application/javascripts;

gzip_vary on;

Syntax: gzip_buffers number size;

Default:

gzip_buffers 32 4k|16 8k;

Context: http, server, location

Syntax: gzip_comp_level level;

Default:

gzip_comp_level 1;

Context: http, server, location

Syntax: gzip_types mime-type ...;

Default:

gzip_types text/html;

Context: http, server, location

Syntax: gzip_vary on | off;

Default:

gzip_vary off;

Context: http, server, location

Syntax: gzip_min_length length;

Default:

gzip_min_length 20;

Context: http, server, location

Syntax: gzip_http_version 1.0 | 1.1;

Default:

gzip_http_version 1.1;

Context: http, server, location


13 配置Nginx expires實現讓客戶端緩存數據

範例1:將網站的所有圖片進行緩存

location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ oldboy.jpg
{
expires 30d;
}

範例2:將網站程序代碼文件在本地進行緩存
location ~ .*.(js|css)$
{
expires 30d;
}
註意事項:

  1. 進行緩存的時間要設置合理
  2. 不是所有請求的數據信息都可以進行緩存

14 Nginx日誌相關優化與安全

1)要將web服務日誌信息進行切割處理
2)不記錄不需要的訪問日誌
location ~ .*.(js|jpg|JPG|jpeg|JPEG|css|bmp|gif|GIF)$ {
access_log off;
}
3)對重要日誌信息進行授權
chown -R root.root /app/logs
chmod -R 700 /app/logs
4)進行日誌清理
編寫腳本自動化清除日誌


15 Nginx站點目錄及文件URL訪問控制

公司會搭建內部網站平臺,只想讓公司內部人員進行查看
範例1:配置Nginx,禁止解析指定目錄下的指定程序。
location ~ ^/images/..(php|php5|sh|pl|py|html)$
{
allow 10.0.0.0/24;
deny 10.0.0.0/24;
}
location ~ ^/static/.
.(php|php5|sh|pl|py)$
{
deny all;
}
location ~ ^/data/(attachment|avatar)/..(php|php5)$
{
deny all;
}
範例1:配置禁止訪問指定的單個或多個目錄。
禁止訪問單個目錄的命令如下:
location ~ ^/(static)/ {
deny all;
}
location ~ ^/static {
deny all;
}


16 配置Nginx,禁止非法域名解析訪問企業網站
方法1:讓使用IP訪問網站的用戶,或者惡意解析域名的用戶,收到501錯誤,命令如下:
server {
listen 80;
servername
return 501;
}

方法2:通過301跳轉到主頁,命令如下:
server {
listen 80;
servername
rewrite ^(.*) http://blog.etiantian.org/$1 permanent;
}

方法3:發現某域名惡意解析到公司的服務器IP,在server標簽裏添加以下代碼即可,若有多個server則要多處添加。
if ($host !~ ^www.oldboyedu.com$)
{
rewrite ^(.*) http://blog.etiantian.org/$1 permanent;
}


17 Nginx圖片及目錄防盜鏈解決方案
模擬實現盜鏈過程:

  1. 配置盜鏈網站信息
    第一個裏程:編寫盜鏈網站配置文件
    server {
    listen 80;
    server_name www.daolian.org;
    root html/daolian;
    index index.html index.htm;
    }

第二裏程:編寫盜鏈網站程序代碼
<html>
<head>
<title>老男孩教育
</title>
</head>
<body bgcolor=green>
whw的博客!
<br>我的博客是linux
<a href="http://oldboy.blog.51cto.com" target="_blank">博客地址
</a>
<img src="http://www.etiantian.org/ mp4/ sdfasdfdsaadsf/10-10/test.mp4">
</body>
</html>

  1. 配置被盜鏈網站信息
    在站點目錄下,生成要被盜鏈的圖片信息
    [root@web01 www]# ll oldboy.jpg
    -rw-r--r-- 1 root root 71806 3月 9 16:27 oldboy.jpg
    1) 根據HTTP referer實現防盜鏈
    location ~ ..(jpg|gif|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ { <--- 判斷只要用戶訪問的是圖片資源
    valid_referers none blocked
    .etiantian.org etiantian.org;
    if ($invalid_referer){
    rewrite ^/ http://www.etiantian.org/nolink.png;
    }
    }

location ~ ^.+.(gif|jpg|png|swf|flv|rar|zip)$ { <==說明:將盜鏈提示圖片緩存到用戶本地
valid_referers none blocked server_names
.etiantian.org etiantian.org;
if ($invalid_referer){
rewrite ^/ http://bbs.etiantian.com/img/nolink.jpg;
}
access_log off;
root html/www;
expires 1d;
break;
}
}
2) 根據cookie防盜鏈
3) 通過加密變換訪問路徑實現防盜鏈(擴展研究)
研究nginx模塊 ngx_http_accesskey_module
4)在產品設計上解決盜鏈方案
在數據信息上加上水印logo信息


18 Nginx錯誤頁面的優雅顯示
##www
server {
listen 80;
server_name www.etiantian.org;
location / {
root html/www;
index index.html index.htm;
}
error_page 403 /403.html; #<==當出現403錯誤時,會跳轉到403.html頁面
}

範例2:50x頁面放到本地單獨目錄下,進行優雅顯示。
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /data0/www/html;
}

範例3:改變狀態碼為新的狀態碼,並顯示指定的文件內容,命令如下:
error_page 404 =200 /empty.gif;
server {
listen 80;
server_name www.linuxpeixun.com;
location / {
root /data0/www/bbs;
index index.html index.htm;
fastcgi_intercept_errors on;
error_page 404 =200 /ta.jpg;
access_log /app/logs/bbs_access.log commonlog;
}
}

範例4:錯誤狀態碼URL重定向,命令如下:
server {
listen 80;
server_name www.oldboyedu.com;
location / {
root html/www;
index index.html index.htm;
error_page 404 http://oldboy.blog.51cto.com;
#<==當出現404錯誤時,會跳轉到指定的URL http://oldboy.blog.51cto.com頁面顯示給用戶,
這個URL一般是企業另外的可用地址
access_log /app/logs/bbs_access.log commonlog;
}
}


19 Nginx站點目錄文件及目錄權限優化

  1. robots.txt機器人協議介紹(君子協議)
  2. 利用user_agent參數信息進行防爬蟲
    範例1:阻止下載協議代理,命令如下:
    if ($http_user_agent ~* LWP::Simple|BBBike|wget)
    {
    return 403;
    }

    if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Yahoo!Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot")
    {
    return 403;
    }


20 利用Nginx限制HTTP的請求方法
#Only allow these request methods
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 501;
}
#Do not accept DELETE,SEARCH and other methods

if ($request_method ~* ^(GET)$ ){
return 501;
}


21 使用普通用戶啟動Nginx(監牢模式)
第一個裏程:把nginx服務重要文件或目錄信息放置到普通用戶家目錄中
[oldboy@web02 ~]$ mkdir {conf,html,logs}
[oldboy@web02 ~]$ cp /application/nginx/conf/nginx.conf.default ./conf/
[oldboy@web02 ~]$ cp /application/nginx/conf/mime.types ./conf/
?
第二個裏程:編寫nginx配置文件
[oldboy@web02 ~]$ cat ./conf/nginx.conf
worker_processes 1;
error_log /home/oldboy/logs/error.log;
pid /home/oldboy/logs/nginx.pid;

events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘
‘$status $body_bytes_sent "$http_referer" ‘
‘"$http_user_agent" "$http_x_forwarded_for"‘;
access_log /home/oldboy/logs/web_blog_access.log main;
server {
listen 80; <-- 對於普通用戶是沒有資格應用特殊端口 大於1024的端口可以讓普通用戶管理
server_name www.etiantian.org;
location / {
root /home/oldboy/html/;
index index.html index.htm;
}
}
}
第三個裏程:利用普通用啟動nginx程序
[oldboy@web02 ~]$ /application/nginx/sbin/nginx -c /home/oldboy/conf/nginx.conf
nginx: [alert] could not open error log file: open() "/application/nginx-1.12.2/logs/error.log" failed (13: Permission denied)
[oldboy@web02 ~]$ ps -ef|grep nginx
oldboy 24337 1 0 19:00 ? 00:00:00 nginx: master process /application/nginx/sbin/nginx -c /home/oldboy/conf/nginx.conf
oldboy 24338 24337 0 19:00 ? 00:00:00 nginx: worker process
oldboy 24340 24297 0 19:00 pts/0 00:00:00 grep --color=auto nginx

web網站集群之企業級Nginx Web服務優化詳解(二)