Nginx配置try_files實踐二


本文內容承接《Nginx配置try_files實踐一

1. 環境:

OS:Ubuntu 15.10

nginx:nginx/1.9.3 (Ubuntu)

假設有三台虛擬機db1(IP:192.168.68.21)/db2(IP:192.168.68.22)/db3(IP:192.168.68.23),通過try_files等配置,使三台機器的/data/www/upload合集組成網絡資源,並且支持HTTPS請求SSL證書未認證(注:未驗證合法證書的場景)

設計思路如下:

若請求到db2:

  • 檢索db2是否存在目標資源,若存在則返回,否則請求通過db1-proxy重定向到db1
  • 檢索db1是否存在目標資源,若存在則返回,否則返回404
  • 把404重定向到db3
  • 檢索db3是否存在目標資源,若存在則返回,否則返回404
  • 請求結束

若請求到db1/db3同理。

2. 配置三台機器nginx默認配置

略過具體過程,注意事項

  • 配置日志格式
  • 生成SSL證書並上傳(/etc/nginx/server.crt, /etc/nginx/server.key)

3. 配置db1

  • /etc/nginx/conf.d/db1.test.com.conf
     server{
          listen 80;
          server_name db1.test.com;
          listen 443 ssl;
          ssl on;
          ssl_certificate /etc/nginx/server.crt;
          ssl_certificate_key /etc/nginx/server.key;
          error_page 404 /404.html;

        access_log  /var/log/nginx/db1_access.log  main;
        error_log   /var/log/nginx/db1_error.log;

        location  /upload
        {
         root /data/www;
         try_files $uri @db2;
        }

        location @db2{
         proxy_pass http://192.168.68.22:8000/proxy$uri;
         proxy_intercept_errors on;
         recursive_error_pages on;
         error_page 404 = @db3;
        }

        location @db3{
         proxy_pass http://192.168.68.23:8000/proxy$uri;
        }
     }
View Code
  • /etc/nginx/conf.d/db1-proxy.test.com.conf
     server{
          listen 8000;
          server_name db1-proxy.test.com;
          error_page 404 /404.html;

        access_log  /var/log/nginx/db1_access.log  main;
        error_log   /var/log/nginx/db1_error.log;

        location  /proxy/upload
        {
         alias /data/www/upload;
        }

     }
View Code
  • 重啟nginx

4. 配置db2

  • /etc/nginx/conf.d/db2.test.com.conf
     server{
          listen 80;
          server_name db2.test.com;
          listen 443 ssl;
          ssl on;
          ssl_certificate /etc/nginx/server.crt;
          ssl_certificate_key /etc/nginx/server.key;
          error_page 404 /404.html;

        access_log  /var/log/nginx/db2_access.log  main;
        error_log   /var/log/nginx/db2_error.log;

        location  /upload
        {
         root /data/www;
         try_files $uri @db1;
        }

        location @db1{
         proxy_pass http://192.168.68.21:8000/proxy$uri;
         proxy_intercept_errors on;
         recursive_error_pages on;
         error_page 404 = @db3;
        }

        location @db3{
         proxy_pass http://192.168.68.23:8000/proxy$uri;
        }
     }
View Code
  • /etc/nginx/conf.d/db2-proxy.test.com.conf
     server{
          listen 8000;
          server_name db2-proxy.test.com;
          error_page 404 /404.html;

        access_log  /var/log/nginx/db2_access.log  main;
        error_log   /var/log/nginx/db2_error.log;

        location  /proxy/upload
        {
         alias /data/www/upload;
        }
     }
View Code
  • 重啟nginx

5. 配置db3

  • /etc/nginx/conf.d/db3.test.com.conf
     server{
          listen 80;
          server_name db3.test.com;
          listen 443 ssl;
          ssl on;
          ssl_certificate /etc/nginx/server.crt;
          ssl_certificate_key /etc/nginx/server.key;
          error_page 404 /404.html;

        access_log  /var/log/nginx/db3_access.log  main;
        error_log   /var/log/nginx/db3_error.log;

        location  /upload
        {
         root /data/www;
         try_files $uri @db1;
        }

        location @db1{
         proxy_pass http://192.168.68.21:8000/proxy$uri;
         proxy_intercept_errors on;
         recursive_error_pages on;
         error_page 404 = @db2;
        }

        location @db2{
         proxy_pass http://192.168.68.22:8000/proxy$uri;
        }
     }
View Code
  • /etc/nginx/conf.d/db3-proxy.test.com.conf
     server{
          listen 8000;
          server_name db3-proxy.test.com;
          error_page 404 /404.html;

        access_log  /var/log/nginx/db3_access.log  main;
        error_log   /var/log/nginx/db3_error.log;

        location  /proxy/upload
        {
         alias /data/www/upload;
        }

     }
View Code
  •  重啟nginx

6. 創建測試文件

server name location url
db1 /data/www/upload/db1.html https://db1.test.com/upload/db1.html
/data/www/upload/db1/test.html https://db1.test.com/upload/db1/test.html
db2 /data/www/upload/db2.html https://db2.test.com/upload/db2.html
/data/www/upload/db2/test.html https://db2.test.com/upload/db2/test.html
db3 /data/www/upload/db3.html https://db3.test.com/upload/db3.html
/data/www/upload/db3/test.html https://db3.test.com/upload/db3/test.html

7. 配置本地host

192.168.68.21 db1.test.com
192.168.68.21 db1-proxy.test.com
192.168.68.22 db2.test.com
192.168.68.22 db2-proxy.test.com
192.168.68.23 db3.test.com
192.168.68.23 db3-proxy.test.com
View Code

8. 訪問結果

url http status
https://db3.test.com/upload/db1.html 200
http://db3.test.com/upload/db1.html 200
https://db3.test.com/upload/db1/test.html 200
http://db3.test.com/upload/db1/test.html 200
https://db3.test.com/upload/db2.html 200
http://db3.test.com/upload/db2.html 200
https://db3.test.com/upload/db2/test.html 200
http://db3.test.com/upload/db2/test.html 200
https://db3.test.com/upload/db3.html 200
http://db3.test.com/upload/db3.html 200
https://db3.test.com/upload/db3/test.html 200
http://db3.test.com/upload/db3/test.html 200
https://db3.test.com/upload/db3/test1.html 404
http://db3.test.com/upload/db3/test1.html 404
https://db3.test.com/upload/dbfdsafas 404
http://db3.test.com/upload/dbfdsafas 404


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM