溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Nginx安裝及配置

發(fā)布時(shí)間:2020-08-20 10:03:46 來(lái)源:網(wǎng)絡(luò) 閱讀:355 作者:李超超超超 欄目:系統(tǒng)運(yùn)維
Nginx (engine x) 是一個(gè)高性能的HTTP和反向代理web服務(wù)器,同時(shí)也提供了IMAP/POP3/SMTP服務(wù)。Nginx是由伊戈?duì)枴べ愃饕驗(yàn)槎砹_斯訪問(wèn)量第二的Rambler.ru站點(diǎn)(俄文:Рамблер)開(kāi)發(fā)的,第一個(gè)公開(kāi)版本0.1.0發(fā)布于2004年10月4日。
其將源代碼以類BSD許可證的形式發(fā)布,因它的穩(wěn)定性、豐富的功能集、示例配置文件和低系統(tǒng)資源的消耗而聞名。2011年6月1日,nginx 1.0.4發(fā)布。
Nginx是一款輕量級(jí)的Web 服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,在BSD-like 協(xié)議下發(fā)行。其特點(diǎn)是占有內(nèi)存少,并發(fā)能力強(qiáng),事實(shí)上nginx的并發(fā)能力在同類型的網(wǎng)頁(yè)服務(wù)器中表現(xiàn)較好,中國(guó)大陸使用nginx網(wǎng)站用戶有:百度、京東、新浪、網(wǎng)易、騰訊、淘寶等。

一、nginx可以實(shí)現(xiàn)的功能
        1、可以作為靜態(tài)資源的web服務(wù)器、可以緩存文件的資源描述符——加速
        2、支持對(duì)http、stmp、pop3等多種協(xié)議的反向代理
        3、支持實(shí)現(xiàn)緩存和負(fù)載均衡
        4、支持fcgi
        5、支持uWSCGI
        6、支持模塊化
        7、支持過(guò)濾器,對(duì)特定文件進(jìn)行壓縮傳輸
        8、支持ssl
        9、支持圖像大小調(diào)整

二.、nginx的特性
        1、模塊
        2、高性能
        3、低內(nèi)存消耗
        4、支持熱部署
        5、支持異步IO
        6、支持事件驅(qū)動(dòng)
        7、支持內(nèi)存映射

三、核心模塊
        1、標(biāo)準(zhǔn)http模塊
        2、拓展http模塊
        3、郵件拓展模塊
        4、第三方模塊

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

五、安裝nginx
(1)創(chuàng)建nginx的運(yùn)行用戶
[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)創(chuàng)建臨時(shí)文件的保存目錄
[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)啟動(dòng)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
測(cè)試:在瀏覽器上輸入 服務(wù)器的IP地址即可訪問(wèn)nginx界面,例如 http://192.168.70.156/

nginx配置詳解
六、和nginx正常運(yùn)行相關(guān)的配置
    1、worker_processes  1;
         設(shè)置發(fā)起幾個(gè)nginx的worker進(jìn)程

    2、user  userName [groupName];
          指定nginx以誰(shuí)的身份來(lái)運(yùn)行

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

    4、worker_rlimit_nofile number;
         設(shè)置所有worker進(jìn)程一共可以打開(kāi)的文件的最大數(shù)量值
       (linux上默認(rèn)每個(gè)用戶可以打開(kāi)1024個(gè)文件、套接字也是一個(gè)文件)

七、nginx性能優(yōu)化相關(guān)配置
    5、worker_processes  number | auto;
         設(shè)置發(fā)起幾個(gè)nginx的worker進(jìn)程
         number:應(yīng)該比物理核心少一個(gè)
         auto:讓系統(tǒng)自動(dòng)判斷

    6、worker_cpu_affinity cpumask ……| auto;
         設(shè)置cpu掩碼,將worker進(jìn)程綁定在一個(gè)固定的cpu
         舉例:
         worker_processes   4;
         worker_cpu_affinity    0001 0010 0100 1000;    
         舉例:
         worker_processes   2;
         worker_cpu_affinity    0001 0100;
         注意:可以用auto,但是是1.9.10之后可以用

   7、time_resolution interval;
         降低發(fā)起系統(tǒng)調(diào)用gettimeofday()次數(shù) 
         time_resolution 100ms;

   8、worker_priority number;
        修改worker進(jìn)程的nice值(默認(rèn)是0)

八、和事件相關(guān)的配置
    9、accept_mutex on | off
          設(shè)置master進(jìn)程將客戶端的請(qǐng)求調(diào)度到worker進(jìn)程的
          調(diào)度方式:輪詢、隨機(jī) 
          on:使用輪詢
          默認(rèn)方式:off

   10、accept_mutex_delay time; 默認(rèn)500ms
          設(shè)置master延遲多久才將客戶端的請(qǐng)求調(diào)度到worker進(jìn)程

   11、user [epoll|poll|select] 
          通常是不需要指定連接的處理方法(起始就是所使用的事件模型)的 
         建議讓系統(tǒng)自動(dòng)判斷所要使用的方法

   12、worker_connections number;
          指定每個(gè)worker進(jìn)程可以處理的最大并發(fā)連接的數(shù)量
          默認(rèn)是1024

   13、master_process on | off;
          指定是否使用master-worker
          默認(rèn)是:on

九、和調(diào)試和定位bug相關(guān)配置
   14、damon off | on
           指定nginx工作在前臺(tái)還是后臺(tái)
        默認(rèn)是 on 

   15、error_log file [level];
           指定錯(cuò)誤日志的保存位置以及日志級(jí)別
            總結(jié):經(jīng)常要修改的參數(shù)
            worker_processes
            worker_connections
            worker_cpu_affinity
            worker_priority

十、和http相關(guān)的配置
[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{
    全局配置:對(duì)所有的虛擬主機(jī)都生效的配置
    sendfile on;
    keepalive_timeout 10;
    ……
    虛擬主機(jī)配置
    server{
        listen 80;指定該虛擬主機(jī)所監(jiān)聽(tīng)的端口
        server_name www.lichao.com;指定虛擬主機(jī)的域名
        root /vhost/web1;指定虛擬主機(jī)的網(wǎng)站根目錄
        location /{

        }
    }
    server{

    }
}           

    16、server_name
            設(shè)定虛擬主機(jī)的域名,可以使用正則表達(dá)式來(lái)表示域名
            適用范圍: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在進(jìn)行域名匹配的時(shí)候,是有一定的規(guī)則,匹配次序如下
    1、做精確匹配,server_name中的內(nèi)容必須和用戶請(qǐng)求的內(nèi)容完全一樣
    2、檢查左側(cè)的通配符
    3、檢查右側(cè)的通配符
    4、檢查通配符
    5、檢查正則表達(dá)式
    6、通過(guò)所有檢查都失敗,則訪問(wèn)default_server,如果沒(méi)有指定default_server,
    那么第一個(gè)server就是default_server

    17、listen
        指定所監(jiān)聽(tīng)的套接字
        例子:
        listen 127.0.0.1:80;
        listen 172.0.0.1;
        listen 80;
        listen *:80;
        listen localhost:80;

    18、root 
        指定網(wǎng)站根目錄
        使用范圍:http、server、location
        注意:如果將root寫(xiě)在了http部分,則會(huì)對(duì)全部的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 "<h2>test for web1</h2>">/vhost/web1/index.html  
        [root@156 ~]# cat /vhost/web1/index.html
        [root@156 ~]# nginx -s reload
        http://192.168.70.156/
        test for web1

19、location
        location [ = | ~ | ~* | ^~ ] uri {……}
        url:統(tǒng)一資源定位符
        uri:統(tǒng)一資源標(biāo)識(shí)符
        server{
            server_name www.zxhk.com;
            listen 80;
            location / {
                root /vhost/web1;
            }
        }
        這里的location的含義就是將用戶所訪問(wèn)的根映射為/vhost/web1路徑
        有多個(gè)location的例子
        server{
            server_name www.zxhk.com;
            listen 80;

            location / {
                root /vhost/web1;
            }

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

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

        location作路徑映射的時(shí)候,有多種方式
        不帶符號(hào) 
        =
        ~
        ~*
        ^~

        1、不帶符號(hào),如下
            location /img {
                root /vhost/web1;
            }

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

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

            要求只有用戶所請(qǐng)求的uri和location所指定的uri必須
            完全一致,否則匹配失敗,如下
            http://www.baidu.com/img               <<匹配成功
            http://www.baidu.com/img/index.html    <<匹配失敗

        3、~表示對(duì)用戶所請(qǐng)求的uri做正則表達(dá)式,檢查過(guò)程中區(qū)分大小寫(xiě)
             location ~ .jgp$ {
                    root /vhost/web1;
            }
        4、~*表示對(duì)用戶所請(qǐng)求的uri做正則表達(dá)式,檢查過(guò)程中不區(qū)分大小寫(xiě)
        5、^~不對(duì)用戶所請(qǐng)求的uri做正則表達(dá)式檢查,而是只檢查uri的左半部分

        各種寫(xiě)法的優(yōu)先級(jí)
        精確匹配優(yōu)先級(jí)最高(=)
        uri的左半部檢查
        區(qū)分大小寫(xiě)的正則表達(dá)式檢查
        不區(qū)分大小寫(xiě)的正則表達(dá)式檢查
        不帶符號(hào)的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
           將用戶所請(qǐng)求的uri映射為一個(gè)指定的路徑 

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"
向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI