Nginx安裝及配置

Nginx (engine x) 是一個高性能的HTTP和反向代理web服務器,同時也提供了IMAP/POP3/SMTP服務。Nginx是由伊戈爾·賽索耶夫爲俄羅斯訪問量第二的Rambler.ru站點(俄文:Рамблер)開發的,第一個公開版本0.1.0發佈於2004年10月4日。
其將源代碼以類BSD許可證的形式發佈,因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。2011年6月1日,nginx 1.0.4發佈。
Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,在BSD-like 協議下發行。其特色是佔有內存少,併發能力強,事實上nginx的併發能力在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。

1、nginx能夠實現的功能
        一、能夠做爲靜態資源的web服務器、能夠緩存文件的資源描述符——加速
        二、支持對http、stmp、pop3等多種協議的反向代理
        三、支持實現緩存和負載均衡
        四、支持fcgi
        五、支持uWSCGI
        六、支持模塊化
        七、支持過濾器,對特定文件進行壓縮傳輸
        八、支持ssl
        九、支持圖像大小調整

二.、nginx的特性
        一、模塊
        二、高性能
        三、低內存消耗
        四、支持熱部署
        五、支持異步IO
        六、支持事件驅動
        七、支持內存映射

3、核心模塊
        一、標準http模塊
        二、拓展http模塊
        三、郵件拓展模塊
        四、第三方模塊

4、安裝依賴
[root@156 ~]# yum groupinstall "Development Tools" -y
[root@156 ~]# yum install pcre-devel openssl openssl-devel -y 

5、安裝nginx
(1)建立nginx的運行用戶
[root@156 ~]# groupadd -r nginx
[root@156 ~]# useradd -r -s /sbin/nologin -g nginx nginx
[root@156 ~]# tar xvf nginx-1.6.2.tar.gz 
[root@156 ~]# cd nginx-1.6.2
[root@156 nginx-1.6.2]# ./configure --help | more
[root@156 nginx-1.6.2]# ./configure \
--prefix=/usr/local/nginx \
--conf-path=/etc/nginx/nginx.conf \
--user=nginx --group=nginx \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--with-http_ssl_module \
--with-http_stub_status_module \
--without-http_gzip_module \
--with-http_mp4_module \
--with-http_flv_module \
--http-client-body-temp-path=/var/tmp/nginx/client \
--http-proxy-temp-path=/var/tmp/nginx/proxy \
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi \
[root@156 nginx-1.6.2]# make && make install

(2)建立臨時文件的保存目錄
[root@156 nginx-1.6.2]# mkdir /var/tmp/nginx/{client,proxy,fcgi} -pv
mkdir: created directory `/var/tmp/nginxclient'
mkdir: created directory `/var/tmp/nginxproxy'
mkdir: created directory `/var/tmp/nginxfcgi'

(3)啓動nginx
[root@156 ~]# /usr/local/nginx/sbin/nginx
[root@156 ~]# ss -tnl | grep 80
LISTEN     0      128                       *:80   
[root@156 ~]# lsof -i :80
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   8395  root    6u  IPv4  20287      0t0  TCP *:http (LISTEN)
nginx   8396 nginx    6u  IPv4  20287      0t0  TCP *:http (LISTEN)
[root@156 ~]# ps aux | grep nginx
root      8395  0.0  0.1  44572  1040 ?        Ss   22:05   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx     8396  0.0  0.1  45000  1620 ?        S    22:05   0:00 nginx: worker process      
root      8513  0.0  0.0 103308   848 pts/0    S+   22:39   0:00 grep nginx
測試:在瀏覽器上輸入 服務器的IP地址便可訪問nginx界面,例如 http://192.168.70.156/

nginx配置詳解
6、和nginx正常運行相關的配置
    一、worker_processes  1;
         設置發起幾個nginx的worker進程

    二、user  userName [groupName];
          指定nginx以誰的身份來運行

    三、pid /path/to/file
         pid文件

    四、worker_rlimit_nofile number;
         設置全部worker進程一共能夠打開的文件的最大數量值
       (linux上默認每一個用戶能夠打開1024個文件、套接字也是一個文件)

7、nginx性能優化相關配置
    五、worker_processes  number | auto;
         設置發起幾個nginx的worker進程
         number:應該比物理核心少一個
         auto:讓系統自動判斷

    六、worker_cpu_affinity cpumask ……| auto;
         設置cpu掩碼,將worker進程綁定在一個固定的cpu
         舉例:
         worker_processes   4;
         worker_cpu_affinity    0001 0010 0100 1000;    
         舉例:
         worker_processes   2;
         worker_cpu_affinity    0001 0100;
         注意:能夠用auto,可是是1.9.10以後能夠用

   七、time_resolution interval;
         下降發起系統調用gettimeofday()次數 
         time_resolution 100ms;

   八、worker_priority number;
        修改worker進程的nice值(默認是0)

8、和事件相關的配置
    九、accept_mutex on | off
          設置master進程將客戶端的請求調度到worker進程的
          調度方式:輪詢、隨機 
          on:使用輪詢
          默認方式:off

   十、accept_mutex_delay time; 默認500ms
          設置master延遲多久纔將客戶端的請求調度到worker進程

   十一、user [epoll|poll|select] 
          一般是不須要指定鏈接的處理方法(起始就是所使用的事件模型)的 
         建議讓系統自動判斷所要使用的方法

   十二、worker_connections number;
          指定每一個worker進程能夠處理的最大併發鏈接的數量
          默認是1024

   1三、master_process on | off;
          指定是否使用master-worker
          默認是:on

9、和調試和定位bug相關配置
   1四、damon off | on
           指定nginx工做在前臺仍是後臺
        默認是 on 

   1五、error_log file [level];
           指定錯誤日誌的保存位置以及日誌級別
            總結:常常要修改的參數
            worker_processes
            worker_connections
            worker_cpu_affinity
            worker_priority

10、和http相關的配置
[root@156 ~]# vim /etc/profile.d/nginx.sh
export PATH=$PATH:/usr/local/nginx/sbin
[root@156 ~]# source /etc/profile.d/nginx.sh    
[root@156 ~]# nginx
[root@156 ~]# nginx -s reload
[root@156 ~]# ss -tnl | grep 80 
上下文:http {指令}
例子:http{
    全局配置:對全部的虛擬主機都生效的配置
    sendfile on;
    keepalive_timeout 10;
    ……
    虛擬主機配置
    server{
        listen 80;指定該虛擬主機所監聽的端口
        server_name www.lichao.com;指定虛擬主機的域名
        root /vhost/web1;指定虛擬主機的網站根目錄
        location /{

        }
    }
    server{

    }
}           

    1六、server_name
            設定虛擬主機的域名,可使用正則表達式來表示域名
            適用範圍:server上下文中

            server{
                server_name www.zxhk.com;

            }
            server {
                server_name *.zxhk.com;

            }
            server {
                server_name www.zxhk.*;

            }
            server {
                server_name *;

            }
            server {
                server_name ~ ^.*\.www.zxhk.com;

            }

            www.zxhk.com

注意:nginx在進行域名匹配的時候,是有必定的規則,匹配次序以下
    一、作精確匹配,server_name中的內容必須和用戶請求的內容徹底同樣
    二、檢查左側的通配符
    三、檢查右側的通配符
    四、檢查通配符
    五、檢查正則表達式
    六、經過全部檢查都失敗,則訪問default_server,若是沒有指定default_server,
    那麼第一個server就是default_server

    1七、listen
        指定所監聽的套接字
        例子:
        listen 127.0.0.1:80;
        listen 172.0.0.1;
        listen 80;
        listen *:80;
        listen localhost:80;

    1八、root 
        指定網站根目錄
        使用範圍:http、server、location
        注意:若是將root寫在了http部分,則會對所有的server都有效

    例子:
        [root@156 ~]# cd /etc/nginx/
        [root@156 nginx]#cp nginx.conf{,.bak}
        [root@156 nginx]#vim nginx.conf
        [root@156 ~]# mkdir -pv /vhost/web1
        [root@156 ~]# echo "<h1>test for web1</h1>">/vhost/web1/index.html  
        [root@156 ~]# cat /vhost/web1/index.html
        [root@156 ~]# nginx -s reload
        http://192.168.70.156/
        test for web1

1九、location
        location [ = | ~ | ~* | ^~ ] uri {……}
        url:統一資源定位符
        uri:統一資源標識符
        server{
            server_name www.zxhk.com;
            listen 80;
            location / {
                root /vhost/web1;
            }
        }
        這裏的location的含義就是將用戶所訪問的根映射爲/vhost/web1路徑
        有多個location的例子
        server{
            server_name www.zxhk.com;
            listen 80;

            location / {
                root /vhost/web1;
            }

            location /img/ {
                root /tmp/img;
            }

            location ~ \.php$ {
                root /phpfile;
            }
            }

        location做路徑映射的時候,有多種方式
        不帶符號 
        =
        ~
        ~*
        ^~

        一、不帶符號,以下
            location /img {
                root /vhost/web1;
            }

            http://www.baidu.com/img
            http://www.baidu.com/a.html

        二、= 表示的是精確匹配
            location = /img {
                root /vhost/web1;
            } 

            要求只有用戶所請求的uri和location所指定的uri必須
            徹底一致,不然匹配失敗,以下
            http://www.baidu.com/img               <<匹配成功
            http://www.baidu.com/img/index.html    <<匹配失敗

        三、~表示對用戶所請求的uri作正則表達式,檢查過程當中區分大小寫
             location ~ .jgp$ {
                    root /vhost/web1;
            }
        四、~*表示對用戶所請求的uri作正則表達式,檢查過程當中不區分大小寫
        五、^~不對用戶所請求的uri作正則表達式檢查,而是隻檢查uri的左半部分

        各類寫法的優先級
        精確匹配優先級最高(=)
        uri的左半部檢查
        區分大小寫的正則表達式檢查
        不區分大小寫的正則表達式檢查
        不帶符號的location

        location /img {
            root /vhost/web1;
        }

    [root@156 ~]# cd /vhost/web1/
    [root@156 web1]# mkdir img
    [root@156 web1]# echo "this is test" >index.html 
    [root@156 web1]# echo "this is image" >img/index.html 
    http://192.168.70.156/
    this is test
    http://192.168.70.156/img/index.html
    this is image

    [root@156 ~]# vim /etc/nginx/nginx.conf
            server {
                listen 80;
                server_name www.zxhk.com;
                location / {
                    root /vhost/web1/;
                }

                location /img/ {
                    root /vhost/web2/;
                }

        }
    [root@156 ~]# cd /vhost/
    [root@156 vhost]# mkdir web2
    [root@156 vhost]# echo "this is web2" > web2/index.html
    [root@156 vhost]# source /etc/profile.d/nginx.sh 
    [root@156 vhost]# nginx -s reload
        http://192.168.70.156/img    
        404 Not Found 
    [root@156 vhost]# vim /var/log/nginx/error.log 
        2019/09/05 08:52:38 [error] 1915#0: *1 open() "/vhost/web1/favicon.ico" failed
        (2: No such file or directory),
    [root@156 vhost]# cd web2/
    [root@156 web2]# ls
    index.html
    [root@156 web2]# mkdir img
    [root@156 web2]# mv index.html  img/
    http://192.168.70.156/img 
    this is web2 

    20、alias path
           將用戶所請求的uri映射爲一個指定的路徑 

server {
                                  listen 80;
                                    server_name www.zxhk.com;
                                    location /img1/ {
                                                    root /vhost/web1/;
                                    }

                                    location /img2/ {
                                                    alias /vhost/web1/;
                                    }
                }
cd /vhost/web1
ls
echo "/vhost/web1">index.html
mkdir img1
echo "/vhost/web1/img1">img1/index.html
source /etc/profile.d/nginx.sh 
nginx -t
nginx -s reload
ls
mkdir img2
echo "/vhost/web2/img/2">img2/index.html
tree
http://192.168.70.156/img2/
/vhost/web1
http://192.168.70.156/img2
404 Not Found

vim /var/log/nginx/error.log 
2019/09/05 09:51:08 [error] 2392#0: *13 open() 
"/usr/local/nginx/html/img2" failed (2: No such 
file or directory), client: 192.168.70.1, server: 
www.zxhk.com, request: "GET /img2 HTTP/1.1", host:
"192.168.70.156"
相關文章
相關標籤/搜索