nginx總結

Nginx 默認訪問日誌 /usr/local/nginx/logs/access.log
默認錯誤日誌 /usr/local/nginx/logs/error.log
PHP 默認錯誤日誌 /var/log/php-fpm/www-error.log
tomcat 日誌目錄 /tomcat的安裝位置/tomcat/logs

安裝nginx,lnmp
  在資源中有一個nginx的tar包,裏面有nginx、lnmp的安裝配置,還有一個blog詳細分析了nginx、lnmp的安裝腳本的編寫,基本思路就是一個源碼包的配置安裝
    解壓,配置,編譯,安裝。
    在配置中有些基本的配置數據:
--prefix=/usr/local/nginx    設置安裝位置 
--user=nginx    設置用戶
--group=nginx    設置所屬組
--with-http_ssl_module    設置需要的拓展模塊(在tar包中有個mode的文件裏面有所有的拓展模塊)

升級nginx(如果要重新修改安裝模塊)
   和安裝差不多,不過,編譯後,不能安裝,而是把objs下的程序拷貝到nginx/sbin下即可,資源包中的nginx_install會自動監測是否安裝了,沒有安裝的話會自動進行升級操作。

lnmp的配置
   lnmp是四個服務的合稱,分別是linux、nginx、mariadb、php


nginx
    其配置文件:/usr/local/nginx/conf/nginx.conf

    nginx的虛擬主機
       在主配置文件的http中每個server都是一個虛擬主機

       http{
         server{                        代表一個虛擬主機的配置
           listen 80;                代表該虛擬主機的接口
           server_name www.localhost.com;    代表域名
           root html;                地址庫(可以是相對位置,可以是絕對路徑,相對位置是再nginx安裝位置找)
          }
       }

    nignx可以作安全的web網站,在一個虛擬網站server中
        listen       443 ssl;
        server_name          域名;
        ssl_certificate      cert.pem;         #這裏是證書文件
        ssl_certificate_key  cert.key;         #這裏是私鑰文件

    nginx的動靜分離
        原理很簡單,就算把php結尾的文件單獨處理,不過要安裝php相關的包,再php中在詳細解釋
       location ~ \.php$ {                # 可以理解成if或者case,他就是當匹配後面的正則表達式的時候執行下面語句
            root           html;            # documentroot,網站根目錄的位置
            fastcgi_pass   127.0.0.1:9000;        # 這個的意思就是php文件給誰解釋,一般php解釋器是本機的9000端口
            fastcgi_index  index.php;            # 默認沒有寫文件的時候,打開的網頁
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi_params;
       }

    nginx的地址重寫技術
      rewrite  舊地址 新地址 [選項]
        last  不再讀其他rewrite,作用是讓地址重寫,匹配即停止
        break  不再讀其他語句,結束請求,匹配rewrite後,下面所有的語句全部不執行
        redirect   臨時重定向,實現跳轉地址欄,就是會讓客戶端的地址欄中的地址也會變化,
              注意:不能修改/地址的時候用這個選項會導致一個無線循環調轉,因爲新地址中也一定有/導致,根一直在循環調轉
        permament  永久重定向
       域名重寫: rewrite  ^/(.*)  新域名地址$1

    nginx的調度
       基本格式:
        upstream 集羣名         # 定義集羣,然後調度
          {
          server  ip  配置屬性;    # 集羣配置,讓什麼ip加入集羣中
          }
        server{
          listen  監聽的端口;
          proxy_pass  集羣名;    # 調用上面定義的集羣
          }
       一個是網站的調度
          直接在http內用upstream創建集羣,在server裏面調度,不過proxy_pass  http://集羣名,集羣名前要加http

       另一個是TCP/IP四層的調度
          需要安裝相關的模塊--with-stream,然後在http外面寫一個stream裏面寫基本格式即可
          不過如果是數據庫的調度代理,需要注意mariadb不允許root遠程登陸,所以要創建用於遠程登陸的用戶並賦權

    nginx的優化
       1. 設置登陸的賬戶和密碼
            先要創建密碼文件裝包:httpd-tools
            用相關命令:如果是第一次新建就加-c,如果是網文件中寫就不要-c,回車後輸入密碼
            htpasswd [-c] 密碼文件位置 用戶
            再修改主配置文件:
            auth_basic "Input your name and password:";        # 密碼輸入前的提示信息
            auth_basic_user_file "/usr/local/nginx/pass";      # 密碼文件的位置 

       2. 爲了提高安全性,網站不顯示nginx的版本號,修改nginx主配置文件http
            server_tokens off;
          再修改nginx/conf/fastcgi.conf中的顯示內容,把SERVER_SOFTWARE這行後面的內容修改了
            fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
          修改成
            fastcgi_param  SERVER_SOFTWARE    nginx;

       3. 修改nginx的CPU和併發連接數,(升級後還需要修改內核的限制纔有用)修改nginx配置文件:
         worker_processes  2;                    //與CPU核心數量一致
         events{
            worker_connections 65535;              //每個worker最大併發連接數
            use epoll;                    //使用較優算法
          }

       4. 調整內核,其中硬鏈接限制軟連接,軟連接限制連接個數,這是修改系統配置
          ulimit -Hn 100000                # 臨時調整硬鏈接
          ulimit -Sn 100000                # 臨時調整軟鏈接
          永久修改要改配置文件/etc/security/limits.conf
          下面那幾行,分別代表:
              對什麼生效 ,格式(soft軟,hard硬 ),需要限制的項目,限制的值
              #<domain>        <type>        <item>          <value>

       5. 修改nginx的內存佔比,修改nginx的主配置文件的htpp即可
          include       mime.types;
          default_type  application/octet-stream;
          client_header_buffer_size 1k;        # 修改默認開啓的緩存大小
          large_client_header_buffers 4 4k;        # 默認緩存不夠時,開啓
 
       6.  配置緩存的保留時間長短,不常修改的文件讓客戶端緩存起來,這也是修改nginx配置的server即可
          server {
             location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
                expires  30d;            //定義客戶端緩存時間爲30天
             }
          }

       7.  編寫錯誤信息的提示頁面,提高用戶滿意度,修改nginx配置文件的http即可
          error_page  錯誤序號1  錯誤序號2 ……  /文件路徑和目錄

錯誤編號 含義
200 正常
301 永久重定向
302 臨時重定向
304 重定向到本機,指的緩存信息
401 用戶名和密碼錯誤
403 禁止訪問,也就是IP被拒絕訪問了
404 文件不存在
414 請求的URI地址欄太長
500 服務器內部錯誤
502 集羣中,調度器無法和後臺服務器鏈接,也就是集羣有問題

       8. 可以實時查看服務器的狀態,修改nginx配置的server即可
          location /status {
                allow  允許查看的IP地址;
                deny all;    # 除了允許的IP,全部拒絕
                stub_status on;
          }

        其中客戶端可以訪問   域名/status   實現遠程查看服務器情況

Active connections 當前活動的連接數量。
Accepts 已經接受客戶端的連接總數量。
Handled 已經處理客戶端的連接總數量(一般與accepts一致,除非服務器限制了連接數量)。
Requests 客戶端發送的請求數量。
Reading 當前服務器正在讀取客戶端請求頭的數量。
Writing 當前服務器正在寫響應信息的數量。
Waiting 當前多少客戶端在等待服務器的響應。

       9. 頁面壓縮,修改nginx配置的server即可
          gzip on;                            //開啓壓縮
          gzip_min_length 最小文件大小、字節數;                //小文件不壓縮
          gzip_comp_level 壓縮比例、是一個整數;                //壓縮比率
          gzip_types 壓縮文件類型1  壓縮文件類型2;         //對特定文件壓縮,類型參考/etc/mime.types

       10. 服務器運用內存進行緩存,修改nginx配置的server即可
          open_file_cache    max=最大多少緩存內容  inactive=多少時間沒有請求就關閉這緩存數據;
          open_file_cache_valid    多少時間強制刷新緩存;
          open_file_cache_min_uses 被請求多少次纔會被緩存;
          open_file_cache_errors   off;            # 關閉緩存報錯,如果緩存出錯,直接取硬盤找,不需要其報錯


PHP
    其是一個有很多模塊組成的程序,連接每個類型數據庫都要不同的模塊,
    如果要連接mariadb需要安裝php   php-mysql   php-fpm-5.4.16-42.el7.x86_64.rpm(在資源的nginx的tar包中有軟件包)
    其配置文件: /etc/php-fpm.d/www.conf
    [www]
       listen = 127.0.0.1:9000            //PHP的IP和端口號
       pm.max_children = 32                //最大進程數量
       pm.start_servers = 15                //最小進程數量
       pm.min_spare_servers = 5            //最少需要幾個空閒着的進程
       pm.max_spare_servers = 32            //最多允許幾個進程處於空閒狀態

   再看其連接mariadb的基本文件類型

<?php
$mysqli = new mysqli('localhost','root','密碼','mysql');        # 連接數據庫
 
if (mysqli_connect_errno()){                        # 判斷數據庫是否連接
    die('Unable to connect!'). mysqli_connect_error();
}
$sql = "select * from user";
$result = $mysqli->query($sql);                    # 進行數據庫命令操作
?>

mariadb

   裝包:mariadb  mariadb-server   mariadb-devel
   服務:mariadb

   準備數據庫,賦予一個用戶權限後,讓服務器可以遠程訪問
   然後,基本的數據庫數據的調度都是通過php完成的


nginx最終主配置文件:

#user  nobody;
worker_processes  4;        # 儘量與CPU核心數一致

#error_log  logs/error.log;        # 記錄錯誤信息的日誌文件
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;        # 記錄nginx的當前進程的文件


events {
    worker_connections  1024;    # 每個worker最大併發連接數
       use epoll;                    # 使用較優算法
}

stream {               # 對於TCP/IP的調度,需要拓展模塊--with-stream
   upstream 集羣名 {
      server IP:段口號;            # 後端SSH服務器的IP和端口
     }
    server {
       listen 監聽的段口號;         # Nginx監聽的端口
       proxy_pass 集羣名;
      }
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    open_file_cache    max=最大多少緩存內容  inactive=多少時間沒有請求就關閉這緩存數據;
    open_file_cache_valid    多少時間強制刷新緩存;
    open_file_cache_min_uses 被請求多少次纔會被緩存;
    open_file_cache_errors   off;            # 關閉緩存報錯,如果緩存出錯,直接取硬盤找,不需要其報錯

    client_header_buffer_size 1k;        # 修改默認開啓的緩存大小
    large_client_header_buffers 4 4k;        # 默認緩存不夠時,開啓的最大內存個數和每個內存部分存的大小

    sendfile        on;

    server_tokens off;            # 爲了安全,不顯示nginx版本號

    keepalive_timeout  65;

    upstream webs {
       server 192.168.2.100:80;
       server 192.168.2.200:80;
    }

    gzip  on;                # 開啓頁面壓縮
    gzip_min_length 最小文件大小、字節數;                # 小文件不壓縮
    gzip_comp_level 壓縮比例、是一個整數;                # 壓縮比率
    gzip_types 壓縮文件類型1  壓縮文件類型2;        # 對特定文件壓縮,類型參考/etc/mime.types(左列是壓縮類型,右列是指相關文件後綴名)

    server {                # 代表一個虛擬主機的配置
        listen       80;        # 監聽端口
        server_name  域名1;        # 設置的域名信息
                auth_basic "Input your name and password:";    # 密碼輸入前的提示信息
                auth_basic_user_file "/usr/local/nginx/pass";    # 密碼文件的位置

        #charset koi8-r;

        upstream 集羣名         # 定義集羣,然後在server虛擬主機中調度
          {
                server  ip1  配置屬性;    # 集羣配置,讓什麼ip加入集羣中,配置屬性有weight權重,max_fails失敗次數,fail_timeout超時時間,down關機,具體查看day3
                server  ip2  weight=1 max_fails=1 fail_timeout=120;
                ip_hash;            # 根據哈希取餘算法進行分配,一條配置就完成了哈希取餘算法調配的所有操作,具體的IP哈希取餘法查看day3
          }

        #access_log  logs/host.access.log  main;
        if ($http_user_agent ~* 瀏覽器名稱) {             # 識別客戶端瀏覽器
                rewrite  ^(.*)$  /自定義的網頁目錄/$1;
          }                                # 如果是要求的瀏覽器,則進行地址重寫

                rewrite  /被重寫地址  /重寫地址  選項;    # 把所有想要重寫的地址進行重寫操作,其選項有last,break,redirect臨時,permament永久,具體內容請查看day2

        location / {
            proxy_pass http://集羣名;        # 調度給其他web服務器
            root   html;                # 根目錄文件所在位置    
        }

        location /status {
            allow  允許查看的IP地址;
            deny all;    # 除了允許的IP,全部拒絕
            stub_status on;
        }

        error_page  404   /404.html;    # 編寫404錯誤的頁面內容

        error_page   500 502 503 504  /50x.html;    # 編寫50*錯誤頁面的內容

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

        location ~ \.php$ {            # 可以理解成if或者case,他就是當匹配後面的正則表達式的時候執行下面語句

                    root           html;            # documentroot,網站根目錄的位置
                    fastcgi_pass   127.0.0.1:9000;        # 這個的意思就是php文件給誰解釋,一般php解釋器是本機的9000端口
                    fastcgi_index  index.php;            # 默認沒有寫文件的時候,打開的網頁
                    include        fastcgi.sconf;
                    }
        }
    }


    # another virtual host using mix of IP-, name-, and port-based configuration

    server {                    # 另外一個web服務器
        listen       80;
        server_name  域名2;

        location / {
            root   html;
            index  index.php index.html index.htm;    # 沒有寫文件的時候默認查看的文件,從前往後依次找
        }
    }


    # HTTPS server

    server {                    # 這是安全的web網站
        listen       443 ssl;
        server_name  域名;

        ssl_certificate      cert.pem;    # 這是證書文件
        ssl_certificate_key  cert.key;    # 這是私鑰文件
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
           root   html;
           index  index.html index.htm;
        }
    }
      server {            # 把不常改變的文件內容讓客戶端進行緩存
        location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
            expires  30d;            //定義客戶端緩存時間爲30天
         }
      }


}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章