1. 程式人生 > >2018-3-15 Linux學習筆記

2018-3-15 Linux學習筆記

12.13 Nginx防盜鏈 12.14 Nginx訪問控制 12.15 Nginx解析php相關配 12.16 Nginx代理

12.13 Nginx防盜鏈
  • 編輯虛擬主機配置文件
    vim /usr/local/nginx/conf/vhost/test.com.conf
  • 配置如下:
    location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$
    {
    expires 7d;
    valid_referers none blocked server_names *.test.com ;
    if ($invalid_referer) {
    return 403;
    }
    access_log off;
    }
  • /usr/local/nginx/sbin/nginx -t
  • /usr/local/nginx/sbin/nginx -s reload
  • 測試結果:
    curl -x127.0.0.1:80 -I test.com/1.gif
    curl -e "http://www.baidu.com" -x127.0.0.1:80 -I test.com/1.gif
    技術分享圖片

12.14 Nginx訪問控制(重要)

  • 1.匹配目錄訪問控制
  • 訪問控制需求:訪問/admin/目錄的請求,只允許某幾個IP訪問.
  • 編輯虛擬主機配置文件
  • vim /usr/local/nginx/conf/vhost/test.com.conf
  • 配置如下:
    location /admin/
    {
    allow 127.0.0.1;
    deny all;
    }
  • mkdir /data/wwwroot/test.com/admin/
  • echo "access control test">/data/wwwroot/test.com/admin/1.html
  • /usr/local/nginx/sbin/nginx -t
  • /usr/local/nginx/sbin/nginx -s reload
    測試結果:
    curl -x127.0.0.1:80 test.com/admin/1.html -I
    curl -x192.168.206.135:80 test.com/admin/1.html -I
    技術分享圖片
    技術分享圖片
  • 2.匹配正則訪問控制
    location ~ .*(upload|image)/.*.php$ #匹配upload目錄且以php結尾的均deny
    {
    deny all;
    }
    測試結果:
    技術分享圖片
  • 3.根據user_agent限制訪問控制
    if ($http_user_agent ~ ‘Spider/3.0|YoudaoBot|Tomato‘)
    {
    return 403;
    }
    註:deny all和return 403效果一樣
    測試結果:
    技術分享圖片

12.15 Nginx解析php相關配置

  • 到目前為止,虛擬主機站點test.com還不能解析php,以下配置它能解析php.
  • 編輯虛擬主機配置文件
  • vim /usr/local/nginx/conf/vhost/test.com.conf
  • 配置如下:
    location ~ .php$
    {
    include fastcgi_params;
    fastcgi_pass unix:/tmp/php-fcgi.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /data/wwwroot/test.com$fastcgi_script_name;
    }
  • 註:fastcgi_pass 用來指定php-fpm監聽的地址或者socket
  • 測試結果:
    技術分享圖片

  • 小結(很重要):
  • (1)假設我們在以上配置解析php的語句中寫錯,在訪問時會出現502錯誤,類似以下
    技術分享圖片
  • 此時我們可先查看nginx的錯誤日誌
    cat /usr/local/nginx/logs/nginx_error.log
    技術分享圖片
  • 再查看下php配置文件中配置的sock是什麽
    cat /usr/local/php-fpm/etc/php-fpm.conf
    技術分享圖片
  • 對比後可發現是因為配置時將/tmp/php-fcgi.sock錯寫成/tmp/php-cgi.sock導致的,更改回來後正常.
  • (2)在php配置文件中定義了listen = /tmp/php-fcgi.sock的同時要加listen.mode = 666,其目的是讓其他用戶也能讀寫php-fcgi.sock文件以解析php,因為nginx的默認用戶是nobody,如果不將php-fcgi.sock設為666權限的話,訪問不了就會出現502錯誤.
  • cat /usr/local/php-fpm/etc/php-fpm.conf
    技術分享圖片
    技術分享圖片

12.16 Nginx代理

  • Nginx代理示意圖:
    技術分享圖片
  • 配置Nginx代理(此例中proxy.conf就相當於代理服務器):
    cd /usr/local/nginx/conf/vhost
    vim proxy.conf //加入如下內容
    server
    {
    listen 80;
    server_name ask.apelearn.com;

    location /
    {
    proxy_pass http://47.91.145.78/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    }


  • 測試結果:
  • 配置前:
    curl -x127.0.0.1:80 ask.apelearn.com/robots.txt
    技術分享圖片
  • 配置後:
    curl -x127.0.0.1:80 ask.apelearn.com/robots.txt
    技術分享圖片

  • 註意事項:
    配置中的IP可能會不時更新,可用dig ask.apelearn.com查詢最新的ask.apelearn.com的IP再做實驗(不然可能會出現其他錯誤).若沒dig命令,可通過以下語句安裝
    yum install -y bind*

擴展學習:
502問題匯總
http://ask.apelearn.com/question/9109
location優先級
http://blog.lishiming.net/?p=100

2018-3-15 Linux學習筆記