nginx詳細應用


一、nginx的基本功能

基本Http服務,可以作為Http代理服務器和反向代理服務器,支持通過緩存加速訪問,可以完成簡單的負載均衡和容錯,支持包過濾功能,支持SSL

高級Http服務,可以進行自定義配置,支持虛擬主機,支持URL重定向,支持網絡監控,支持流媒體傳輸等

郵件代理服務器,支持IMAP/POP3代理服務功能,支持內部SMTP代理服務功能

二、nginx的具體應用

1、nginx的虛擬主機:經過對nginx配置文件的配置,生成虛擬主機;實現不同的域名訪問不同的頁面

虛擬主機技術:主要應用與http服務;將一台服務器的某項或多個服務內容邏輯划分為多個服務單位,對外表現為多個服務器,從而可以充分利用服務器的硬件資源。具體配置如下 

1)修改nginx配置文件

 

server {
        listen       80;
        server_name  www.xniu.com;
        location / {
               root   /www1;
               index  index.html;
        }
server {
        listen 80;
        server_name  www.linux.org;

        location /{
                root /www2;
                index index.html;
        }
    }
2)在根目錄下建立www1和www2目錄,並編輯index.html默認發布文件。並啟動nginx服務

3)在物理機中做解析。

--->  vim  /etc/hosts

      server6  www.xniu.com  www.linux.org

4)在真機中測試結果如下:


2、nginx實現https加密

1)編輯nginx配置文件

# HTTPS  server

server {

        listen       443 ssl;
        server_name  www.xniu.com;

        ssl_certificate      cert.pem;    # 把認證的鑰匙和密碼設置相同
        ssl_certificate_key  cert.pem;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
            root   /www1;
            index  index.html index.htm;
        }
    }

--->  /usr/local/lnmp/nginx/sbin/nginx  -t    # 沒有認證的鎖和鑰匙

2)生成鎖和鑰匙

--->  cd  /etc/pki/tls/certs

--->  make cert.pem           # 基本信息自己填寫

--->  mv cert.pem  /usr/local/lnmp/nginx/conf/
3)重新加載nginx配置文件,就ok了。

4)在瀏覽器中進行測試


3、 重定向

3-1、將www.xniu.com和xniu.com重定向到https://www.xniu.com。nginx配置如下:(重定向到443)

 

server {
        listen       80;
        server_name  www.xniu.com  xniu.com;
        rewrite  ^/(.*)$ https://www.xniu.com/$1 permanent;       # 使用通配符表示。permanent表永久生效

        # $1表示,www.xniu.com/news會訪問到https://www.xniu.com/news/index.html目錄

        # location / {          # 由於進行域名的重定向,則它發布目錄就可以注釋另外

        #     root   /www1;
        #     index  index.html;
        # }


3-2、將www.xniu.com重定向到bbs.xniu.com;即重定向到其他訪問目錄 。配置如下:

 

server {
        listen       80;
        server_name  www.xniu.com  xniu.com;
        rewrite ^/bbs$  http://bbs.xniu.com;    # 當訪問www.xniu.com/bbs的時候,會重定向到bbs.xniu.com的默認發布目錄

       

        # 當重定向有條件的時候,就要把自己的發布目錄也添加進去(當條件不滿足時執行)

 

        location / {            

               root   /www1;
               index  index.html;
        }
    }
# 添加bbs.xniu.com的服務
server {              
        listen  80;
        server_name  bbs.xniu.com;

        location /{
                root  /bbs;
                index  index.html;
        }
在物理機中添加解析:  172.25.2.6  bbs.xniu.com;並在server6中創建bbs.xniu.com對應的發布目錄和文件。最終結果為:

3-3、將www.xniu.com/bbs/index.html 重定向到 bbs.xniu.com/index.html

server {
        listen       80;
        server_name  www.xniu.com  xniu.com;
        rewrite ^/bbs$  http://bbs.xniu.com;              # 當以bbs結尾時,重定向到http://bbs.xniu.com
        rewrite ^/bbs/(.*)$  http://bbs.xniu.com/$1;      # 當為www.xniu.com/bbs/index.html會重定向到對應的index.html

         

        location / {

               root   /www1;
               index  index.html;
        }
}

3-4、反向重定向:當訪問bbs.xniu.com的時候,重定向到https://www.xniu.com/bbs

 

server {
        listen       80;
        server_name  www.xniu.com  xniu.com;
        #rewrite ^/bbs$  http://bbs.xniu.com;
        #rewrite ^/bbs/(.*)$  http://bbs.xniu.com/$1;
        #rewrite  ^/(.*)$ https://bbs.xniu.com/$1 permanent;

        location / {
            root   /www1;
            index  index.html;
        }
server {
        listen  80;
        server_name  bbs.xniu.com;
        rewrite ^/(.*)$ https://www.xniu.com/bbs/$1;         # 訪問bbs.xniu.com轉到https://www.xniu.com/bbs下
        location /{
                root  /bbs;
                index  index.html;
        }
    }


4、限制客戶的訪問並發量和下載速率

1)限制客戶端的並發數

#gzip  on;
  limit_conn_zone   $binary_remote_addr  zone=addr:10m; 
  location  /download/ {   # 在該目錄下存放訪問的圖片
            limit_conn  addr  1;        #設置並發量為1
  }
#在html目錄下建立download目錄,並放置一張圖片用來訪問(注意圖片的權限)。然后在物理機中模擬客戶端的並發請求,結果如下:

--->  ab -c1 -n 10 http://www.xniu.com/download/test.jpg   # 發送10個請求,並發為1。(此時所有請求均正常接收)

# 在nginx的日志中查看訪問記錄。我們可以看到訪問都是正常的,返回值為200.

--->  tail -n 10 /usr/local/lnmp/nginx/logs/access.log 

172.25.2.250 - - [05/Oct/2018:15:13:20 +0800] "GET /download/test.jpg HTTP/1.0" 200 127785 "-" "ApacheBench/2.3"
172.25.2.250 - - [05/Oct/2018:15:13:20 +0800] "GET /download/test.jpg HTTP/1.0" 200 127785 "-" "ApacheBench/2.3"
172.25.2.250 - - [05/Oct/2018:15:13:20 +0800] "GET /download/test.jpg HTTP/1.0" 200 127785 "-" "ApacheBench/2.3"
172.25.2.250 - - [05/Oct/2018:15:13:20 +0800] "GET /download/test.jpg HTTP/1.0" 200 127785 "-" "ApacheBench/2.3"
172.25.2.250 - - [05/Oct/2018:15:13:20 +0800] "GET /download/test.jpg HTTP/1.0" 200 127785 "-" "ApacheBench/2.3"
172.25.2.250 - - [05/Oct/2018:15:13:20 +0800] "GET /download/test.jpg HTTP/1.0" 200 127785 "-" "ApacheBench/2.3"
172.25.2.250 - - [05/Oct/2018:15:13:20 +0800] "GET /download/test.jpg HTTP/1.0" 200 127785 "-" "ApacheBench/2.3"
172.25.2.250 - - [05/Oct/2018:15:13:20 +0800] "GET /download/test.jpg HTTP/1.0" 200 127785 "-" "ApacheBench/2.3"
172.25.2.250 - - [05/Oct/2018:15:13:20 +0800] "GET /download/test.jpg HTTP/1.0" 200 127785 "-" "ApacheBench/2.3"
172.25.2.250 - - [05/Oct/2018:15:13:20 +0800] "GET /download/test.jpg HTTP/1.0" 200 127785 "-" "ApacheBench/2.3
如果並發量為大與1的時候,就會有1個錯誤請求。我們可以在日志在查看到十個請求只有一個被正常響應了。

--->  ab -c10 -n 10 http://www.xniu.com/download/test.jpg

# 查看日志接收的情況:

--->  tail -n 10 /usr/local/lnmp/nginx/logs/access.log

172.25.2.250 - - [05/Oct/2018:15:26:05 +0800] "GET /download/test.jpg HTTP/1.0" 503 537 "-" "ApacheBench/2.3"
172.25.2.250 - - [05/Oct/2018:15:26:05 +0800] "GET /download/test.jpg HTTP/1.0" 503 537 "-" "ApacheBench/2.3"
172.25.2.250 - - [05/Oct/2018:15:26:05 +0800] "GET /download/test.jpg HTTP/1.0" 503 127785 "-" "ApacheBench/2.3"
172.25.2.250 - - [05/Oct/2018:15:26:05 +0800] "GET /download/test.jpg HTTP/1.0" 503 537 "-" "ApacheBench/2.3"
172.25.2.250 - - [05/Oct/2018:15:26:05 +0800] "GET /download/test.jpg HTTP/1.0" 503 537 "-" "ApacheBench/2.3"
172.25.2.250 - - [05/Oct/2018:15:26:05 +0800] "GET /download/test.jpg HTTP/1.0" 503 537 "-" "ApacheBench/2.3"
172.25.2.250 - - [05/Oct/2018:15:26:05 +0800] "GET /download/test.jpg HTTP/1.0" 503 537 "-" "ApacheBench/2.3"
172.25.2.250 - - [05/Oct/2018:15:26:05 +0800] "GET /download/test.jpg HTTP/1.0" 503 537 "-" "ApacheBench/2.3"
172.25.2.250 - - [05/Oct/2018:15:26:05 +0800] "GET /download/test.jpg HTTP/1.0" 503 537 "-" "ApacheBench/2.3"
172.25.2.250 - - [05/Oct/2018:15:26:05 +0800] "GET /download/test.jpg HTTP/1.0" 200 127785 "-" "ApacheBench/2.3"

2)限制客戶端下載速率為50kb

#gzip  on;

  limit_req_zone  $binary_remote_addr  zone=one:10m  rate=1r/s;       

  limit_conn_zone   $binary_remote_addr  zone=addr:10m;          # 限制帶寬

  location  /download {

            limit_conn  addr  1;        #設置並發量為1

            limit_rate  50k;            #設置速率為50k
            limit_req  zone=one  burst=5 ;
      }

5、用戶訪問控制

1)只允許172.25.2.250的主句訪問

 

location / {
         allow  172.25.2.250;     # ip為250的到達之后,會先允許;其他ip主機到達之后,直接deny
         deny all;
         root   /www1;
         index  index.html;
   }

# 使用主機172.25.2.1來訪問server6,會出現430訪問禁止情況:

2)允許特定網段的主機訪問

 

location / {
        allow  172.25.2.0/24;             # 允許172.25.2.0網段訪問
        deny   all;
        root   /www1;
        index  index.html;
  }

# 此時172.25.2.1主機就可以訪問了

3)當所有主機訪問默認頁面時,設置為500報錯或進行重定向

 

server {
        listen       80;
        server_name  _;

        return 500;      # 當其他主機訪問,返回500錯誤

        # rewrite ^(.*) http://www.westos.org permanent;   # 重定向到其他站點

6、nginx中的亂碼問題。(默認是不能識別漢語)

 

server {
        listen       80;
        server_name  localhost;
        charset utf-8;   # 添加字符編碼的格式: utf-8;

7、去掉沒必要的日志

 access_log   off;

8、防盜鏈機制:在其他主機上訪問server6中的文件

# 在一台含有apache的主機的默認發布目錄下,添加如下內容

<html>
<body>
<img src="http://172.25.2.6/download/test.jpg">     # 通過server1訪問server6中的圖片
</body>
</html>      

# 在server6中nginx的配置文件添加防盜鏈的訪問權限

location ~ .*\.(gif|jpg|png)$ {            # 格式為gif、jpg、png的訪問的設定
            expires  30d;   # 圖片緩存時間是30d
            valid_referers none  blocked www.xniu.com; 
            if ($invalid_referer) {     # 表示除了www.xniu.com,其他訪問均為403
                    return 403;
            }
    }

# 此時403在頁面為圖片的時候不會有提示;我們可以將顯示頁面進行重定向(實現人機交互),編輯ngxin配置文件:

 

location ~ .*\.(gif|jpg|png)$ {
        expires  30d;   # 圖片緩存時間是30d
        valid_referers none  blocked www.xniu.com;
        if ($invalid_referer) {
                #return 403;
                rewrite ^/ http://bbs.xniu.com/daolian.jpg; # 重定向到daolian.jpg
            }
     }
server {
        listen  80;
        server_name  bbs.xniu.com;
        #rewrite ^/(.*)$ https://www.xniu.com/bbs/$1;
        location /{
                root  /www2;       # 把防盜鏈圖片放在/www2的目錄下
                index  index.html;
        }
    }



 


免責聲明!

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



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