天天看點

《前端運維》二、Nginx–1基本概念及安裝

大家好,又見面了,我是你們的朋友全棧君。

一、Nginx基本概念

  簡單來說,Nginx就是一個代理伺服器,什麼是代理伺服器呢?也就是當我們通路伺服器的時候,請求不會直接請求到伺服器,中間會有個代理,代理會預先于伺服器處理這些請求,最後由代理決定是否要把請求送出至伺服器。

  那麼,Nginx解決了什麼問題?直接通路伺服器不行麼?為啥要費事的走一遍代理呢?

  Nginx的優勢主要有:

  1. 高并發、高性能
  2. 可擴充性好
  3. 高可靠性
  4. 熱部署
  5. 開源許可

  這樣,大家就可以了解,為什麼要使用Nginx了吧,主要就是為了解決傳統伺服器的一些局限性。Nginx的最常見的使用場景大緻有以下幾點:

  1. 靜态資源伺服器
  2. 反向代理服務
  3. API接口服務

  下面,我們來學習下Nginx的基本架構。首先,Nginx是十分輕量的,源代碼隻包含核心子產品。其他非核心子產品都是通過子產品實作,可以自由選擇。然後,Nginx采用的是多程序(單線程)和多路IO複用。我們來看下具體的内容:

1、Nginx工作流程

  首先,Nginx在啟動後,會有一個master程序和多個互相獨立的worker程序。在接收到來自外界的信号時,向各worker程序發送信号,每個程序都有可能來處理該信号。master程序能監控worker程序的運作狀态,當worker程序退出或出現異常後,會自動啟動新的worker程序。

2、IO多路複用

  多個檔案描述符的IO操作都能在一線程裡并發交替順序完成,複用線程。

3、CPU親和

  把CPU核心和nginx的工作程序綁定在一起,讓每個worker程序固定在一個CPU上執行,進而減少CPU的切換并提高緩存命中率,提高性能。

4、sendfile零拷貝傳輸模式

二、安裝Nginx

  首先,假設你看了我之前寫的Linux部分,那麼請把伺服器重置一下,我們從0、從一個幹淨的伺服器環境開始。

  其次,在安裝Nginx,我們要确認關閉防火牆和停用selinux。其實,不關閉防火牆也是可以的,但是需要開放端口,這個我們後面會學習,是以,現在為了簡便,直接關閉防火牆就好。另外,selinux是安全增強型linux,是Linux的一個核心子產品,也是Linux的一個本機安全性授權,selinux最主要的作用就是最大限度地減小系統中服務程序可通路的資源,即最小權限原則。

1、關閉防火牆與selinux

  1. 關閉防火牆指令
    • systemctl stop firewalld.service,停用防火牆。
    • systemctl disable firewalld.service,永久關閉防火牆。
    • systemctl status firewalld,檢視防火牆狀态。
  2. 停用selinux
    • getenforce 或者/usr/sbin/sestatus -v,檢查selinux狀态。
    • setenforce 0,臨時關閉。
    • 編輯/etc/selinux/config檔案,把SELINUX=

      enforcing

      改為SELINUX=

      disabled,永久關閉。

  然後,我們需要安裝依賴子產品,其實在學習Linux的部分,有講到這些,這裡也再簡單重複一遍。

yum  -y install gcc gcc-c++ autoconf pcre pcre-devel make automake openssl openssl-devel           

複制

  我們來簡單解釋下,這些子產品都是做什麼用的:

  1. gcc,gcc是指整個gcc的這一套工具集合,它分為gcc前端和gcc後端(我個人了解為gcc外殼和gcc引擎),gcc前端對應各種特定語言(如c++/go等)的處理(對c++/go等特定語言進行對應的文法檢查, 将c++/go等語言的代碼轉化為c代碼等),gcc後端對應把前端的c代碼轉為跟你的電腦硬體相關的彙編或機器碼。
  2. gcc-c++,就軟體程式包而言,gcc.rpm就是那個gcc後端,而gcc-c++.rpm就是針對c++這個特定語言的gcc前端。
  3. autoconf,是一個軟體包,以适應多種Unix類系統的shell腳本的工具。
  4. pcre,Perl Compatible Regular Expressions 是一個Perl庫,包括 perl 相容的正規表達式庫。
  5. pcre-devel,主要是供開發用,包含頭檔案和連結庫。
  6. make,常指一條計算機指令,是在安裝有GNU Make的計算機上的可執行指令。該指令是讀入一個名為makefile的檔案,然後執行這個檔案中指定的指令。
  7. automake,可以用來幫助我們自動地生成符合自由軟體慣例的Makefile。
  8. wget,是一個從網絡上自動下載下傳檔案的自由工具,支援通過 HTTP、HTTPS、FTP 三個最常見的 TCP/IP協定 下載下傳,并可以使用 HTTP 代理。
  9. httpd-tools,apace壓力測試。

2、安裝Nginx

  首先,跟其他軟體的版本分類類似,Nginx也分為:

  • Mainline version 開發版
  • Stable version 穩定版
  • Legacy versions 曆史版本

  這幾種版本。下載下傳位址:http://nginx.org/en/download.html。以及通過Nginx下載下傳的方式:http://nginx.org/en/linux_packages.html#stable。

  那麼在CentOS下可以通過YUM來安裝Nginx,通過vim,編輯/etc/yum.repos.d/nginx.repo檔案:

vi /etc/yum.repos.d/nginx.repo           

複制

  在其中填寫如下内容:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1           

複制

  然後,安裝Nginx:

yum install nginx -y //安裝nginx
nginx -v //檢視安裝的版本
nginx -V //檢視編譯時的參數           

複制

  好了,到這裡,我們基本了解了Nginx是什麼,能做什麼,以及成功安裝了Nginx。下一篇,我們來具體的學習一下Nginx的一些核心内容。

三、Nginx目錄

  我們可以通過rpm -ql nginx指令,來檢視nginx安裝的配置檔案和目錄。通過該指令查詢到的檔案如下:

/etc/logrotate.d/nginx
/etc/nginx/fastcgi.conf
/etc/nginx/fastcgi.conf.default
/etc/nginx/fastcgi_params
/etc/nginx/fastcgi_params.default
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
/etc/nginx/mime.types.default
/etc/nginx/nginx.conf
/etc/nginx/nginx.conf.default
/etc/nginx/scgi_params
/etc/nginx/scgi_params.default
/etc/nginx/uwsgi_params
/etc/nginx/uwsgi_params.default
/etc/nginx/win-utf
/usr/bin/nginx-upgrade
/usr/lib/.build-id
/usr/lib/.build-id/2d
/usr/lib/.build-id/2d/da6018ae12edb856ad3d2cf61bf586b6b4873c
/usr/lib/systemd/system/nginx.service
/usr/lib64/nginx/modules
/usr/sbin/nginx
/usr/share/doc/nginx
/usr/share/doc/nginx/CHANGES
/usr/share/doc/nginx/README
/usr/share/doc/nginx/README.dynamic
/usr/share/licenses/nginx
/usr/share/licenses/nginx/LICENSE
/usr/share/man/man3/nginx.3pm.gz
/usr/share/man/man8/nginx-upgrade.8.gz
/usr/share/man/man8/nginx.8.gz
/usr/share/nginx/html/404.html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html
/usr/share/nginx/html/nginx-logo.png
/usr/share/nginx/html/poweredby.png
/usr/share/vim/vimfiles/ftdetect/nginx.vim
/usr/share/vim/vimfiles/indent/nginx.vim
/usr/share/vim/vimfiles/syntax/nginx.vim
/var/lib/nginx
/var/lib/nginx/tmp
/var/log/nginx           

複制

  差不多有這麼多,我們會調其中部分必要的進行說明,其他的大家可以自行查詢哦。

  1. /etc/logrotate.d/nginx,日志切割檔案,為了防止日志體積過大,讀寫困難,是以會對日志進行切割。
  2. /etc/nginx/nginx.conf,核心配置檔案。
  3. /etc/nginx/conf.d/default.conf,預設http伺服器配置檔案。
  4. /etc/nginx/modules,最基本的共享庫和核心子產品。
  5. /usr/share/doc/nginx-1.14.2,幫助文檔。
  6. /usr/share/doc/nginx-1.14.0/COPYRIGHT,版權聲明。
  7. /usr/share/man/man8/nginx.8.gz,手冊。
  8. /var/cache/nginx,nginx緩存目錄。
  9. /var/log/nginx,nginx日志目錄。
  10. /usr/sbin/nginx,可執行指令,nginx服務啟動管理的可執行檔案。
  11. /usr/sbin/nginx-debug,調試執行可執行檔案。

1)nginx核心配置檔案

  上面的清單中,我們看到nginx核心的配置檔案,我們一起來看下其中的内容:

user nginx; # 啟動nginx使用者
worker_processes auto; # work程序數,一般和cpu核數相等
error_log /var/log/nginx/error.log; # 錯誤日志路徑
pid /run/nginx.pid; # 程序ID寫入的檔案

events { # 事件子產品
    worker_connections 1024; # 工作程序的最大連接配接數,超過的連結就會丢失
}

http {
    # 定義日志的格式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main; # 用上面的格式來寫日志

    sendfile            on; # 打開零拷貝
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65; # 保持連接配接的逾時時間 65秒
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types; # 引入額外的配置檔案,包含mime檔案
    default_type        application/octet-stream; # 預設二進制類型,若在mime中找不到的話,就傳回該類型,

    include /etc/nginx/conf.d/*.conf; # 

    server { # 最核心的配置檔案,用來作為服務配置的
        listen       80 default_server; # 監聽端口
        listen       [::]:80 default_server;
        server_name  _; # 服務名稱,或者是域名,或者是ip
        root         /usr/share/nginx/html;

        include /etc/nginx/default.d/*.conf;

        location / { # 重點中的重點,路徑,“/”比對所有的檔案
        # root /usr/share/nginx/html # 檔案根路徑,根目錄
        # index   index.html  index.htm # 索引檔案,預設檔案
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
}           

複制

  上面,就是nginx核心配置檔案的内容,我都加上了注釋,并删除了原有的部分注釋。了解起來并不難。

ps:

  1. 如果你發現伺服器啟動nginx後,通過浏覽器ip位址通路但是通路不到nginx伺服器,可能是因為你的伺服器沒開發80端口,需要你的雲伺服器上配置80端口,具體方法請自行百度。
  2. reload 和 restart 是有差別的。restart會粗暴的斷開與用戶端的連接配接。reload會在下一次服務接入時使用新的配置,不會終端目前進行中的舊配置請求。
  3. nginx -t,可以校驗nginx配置檔案文法是否錯誤。

釋出者:全棧程式員棧長,轉載請注明出處:https://javaforall.cn/124355.html原文連結:https://javaforall.cn