大家好,又見面了,我是你們的朋友全棧君。
一、Nginx基本概念
簡單來說,Nginx就是一個代理伺服器,什麼是代理伺服器呢?也就是當我們通路伺服器的時候,請求不會直接請求到伺服器,中間會有個代理,代理會預先于伺服器處理這些請求,最後由代理決定是否要把請求送出至伺服器。
那麼,Nginx解決了什麼問題?直接通路伺服器不行麼?為啥要費事的走一遍代理呢?
Nginx的優勢主要有:
- 高并發、高性能
- 可擴充性好
- 高可靠性
- 熱部署
- 開源許可
這樣,大家就可以了解,為什麼要使用Nginx了吧,主要就是為了解決傳統伺服器的一些局限性。Nginx的最常見的使用場景大緻有以下幾點:
- 靜态資源伺服器
- 反向代理服務
- 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
- 關閉防火牆指令
- systemctl stop firewalld.service,停用防火牆。
- systemctl disable firewalld.service,永久關閉防火牆。
- systemctl status firewalld,檢視防火牆狀态。
- 停用selinux
- getenforce 或者/usr/sbin/sestatus -v,檢查selinux狀态。
- setenforce 0,臨時關閉。
- 編輯/etc/selinux/config檔案,把SELINUX=
改為SELINUX=enforcing
disabled,永久關閉。
然後,我們需要安裝依賴子產品,其實在學習Linux的部分,有講到這些,這裡也再簡單重複一遍。
yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake openssl openssl-devel
複制
我們來簡單解釋下,這些子產品都是做什麼用的:
- gcc,gcc是指整個gcc的這一套工具集合,它分為gcc前端和gcc後端(我個人了解為gcc外殼和gcc引擎),gcc前端對應各種特定語言(如c++/go等)的處理(對c++/go等特定語言進行對應的文法檢查, 将c++/go等語言的代碼轉化為c代碼等),gcc後端對應把前端的c代碼轉為跟你的電腦硬體相關的彙編或機器碼。
- gcc-c++,就軟體程式包而言,gcc.rpm就是那個gcc後端,而gcc-c++.rpm就是針對c++這個特定語言的gcc前端。
- autoconf,是一個軟體包,以适應多種Unix類系統的shell腳本的工具。
- pcre,Perl Compatible Regular Expressions 是一個Perl庫,包括 perl 相容的正規表達式庫。
- pcre-devel,主要是供開發用,包含頭檔案和連結庫。
- make,常指一條計算機指令,是在安裝有GNU Make的計算機上的可執行指令。該指令是讀入一個名為makefile的檔案,然後執行這個檔案中指定的指令。
- automake,可以用來幫助我們自動地生成符合自由軟體慣例的Makefile。
- wget,是一個從網絡上自動下載下傳檔案的自由工具,支援通過 HTTP、HTTPS、FTP 三個最常見的 TCP/IP協定 下載下傳,并可以使用 HTTP 代理。
- 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
複制
差不多有這麼多,我們會調其中部分必要的進行說明,其他的大家可以自行查詢哦。
- /etc/logrotate.d/nginx,日志切割檔案,為了防止日志體積過大,讀寫困難,是以會對日志進行切割。
- /etc/nginx/nginx.conf,核心配置檔案。
- /etc/nginx/conf.d/default.conf,預設http伺服器配置檔案。
- /etc/nginx/modules,最基本的共享庫和核心子產品。
- /usr/share/doc/nginx-1.14.2,幫助文檔。
- /usr/share/doc/nginx-1.14.0/COPYRIGHT,版權聲明。
- /usr/share/man/man8/nginx.8.gz,手冊。
- /var/cache/nginx,nginx緩存目錄。
- /var/log/nginx,nginx日志目錄。
- /usr/sbin/nginx,可執行指令,nginx服務啟動管理的可執行檔案。
- /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:
- 如果你發現伺服器啟動nginx後,通過浏覽器ip位址通路但是通路不到nginx伺服器,可能是因為你的伺服器沒開發80端口,需要你的雲伺服器上配置80端口,具體方法請自行百度。
- reload 和 restart 是有差別的。restart會粗暴的斷開與用戶端的連接配接。reload會在下一次服務接入時使用新的配置,不會終端目前進行中的舊配置請求。
- nginx -t,可以校驗nginx配置檔案文法是否錯誤。
釋出者:全棧程式員棧長,轉載請注明出處:https://javaforall.cn/124355.html原文連結:https://javaforall.cn