一、環境調試確認
安裝
yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake
yum -y install wget httpd-tools vim
一次初始化
mkdir app download logs work backup
關閉iptables規則
iptables -L
iptables -F
iptables -t nat -L
iptables -t nat -F
關於iptables的介紹,大家可以看看http://www.zsythink.net/archives/1199/這篇文章,講的非常好
關閉selinux
getenforce如果顯示不是Disabled那麼就要執行setenforce 0
二、Nginx是什麼
Nginx是一個開源且高性能、可靠的HTTP中間件、代理服務
三、常見的HTTP服務
四、爲什麼選擇Nginx
原因一:採用IO多路複用epoll模型
什麼epoll模型,我們先看看一張圖:
圖中畫出了硬件的4個部分,如果我們想和硬件打交道,則需要軟件,我們的Nginx在接受到了外部請求之後會使用Linux內核中的epoll模型與硬件打交道,epoll是一個高效的處理IO複用的內核模型。那麼這裏的關鍵就是處理IO複用,那麼什麼是IO複用呢?看下一張圖:
在早期的時候面對用戶的一個請求,會產生一個socket流,然後要對用的socket流進行處理。我們假設這個時候我們只有一個線程去面對大併發的請求,第一個請求的到來會佔有這個線程,假設這個流的數據沒有完全達到服務器,那麼線程會一直等待(乾等),什麼事情也不能幹,而且也阻塞了其他的請求。那麼這個時候我們可以相處兩個方案,第一個方案就是使用多線程,同時處理多個請求,但是這樣做同樣也會消費很多資源,無法滿足大量的併發,這個時候第二個方案出現了,它就是使用一個線程採用IO複用模式。
一個for循環不斷的去遍歷所有的流,如果有數據了就讀取,否則就去遍歷下一個流,假設所有的流沒有數據,只會白白浪費CPU。
通過上圖我們可以看到IO複用內核模式的種類以及演變。接下來我們來講講這3中模型。
select相比於之前的僞代碼就多了一步,只有在流中有數據的時候,纔開始讀取數據,這樣就不會讓CPU白白空跑。
原因二:CPU親和
CPU親和是把CPU核心和Nginx工作進程進行綁定的一種方式,把每個worker綁定到一個cpu上執行,減少切換cpu的cache miss,獲得更好的性能。
原因三:sendFile
文件的傳輸不再通過內核態到用戶態,然後在由用戶態傳遞到內核態在傳遞給socket,取而代之的是,直接走內核態的buffer cache,減少一次拷貝。
五、Nginx的快速安裝
官方網址:http://nginx.org/
步驟一:
cat /proc/version或者lsb_release -a查看操作系統的版本
詳細的安裝步驟在這個頁面:http://nginx.org/en/linux_packages.html
步驟二:
vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
步驟三:
yum install nginx
步驟四:查看安裝是否成功
nginx -v查看nginx的版本
nginx -V查看nginx的安裝編譯參數
六.Nginx的目錄和配置語法
安裝目錄詳解:
我們使用yum安裝nginx之後,其實裝的就是nginx的一堆rpm包,通過rpm -ql nginx命令我們可以看看到底裝了一些什麼東西,而且都放在什麼目錄下。
路徑 | 類型 | 作用 |
---|---|---|
/etc/logrotate.d/nginx | 配置文件 | Nginx日誌輪轉,用於logrotate服務的日誌切割 |
/etc/nginx /etc/nginx/nginx.conf /etc/nginx/conf.d /etc/nginx/conf.d/default.conf | 目錄、配置文件 | Nginx主配置文件 |
/etc/nginx/fastcgi_params /etc/nginx/uwsgi_params /etc/nginx/scgi_params | 配置文件 | cgi配置相關,fastcgi配置 |
/etc/nginx/koi-utf /etc/nginx/koi-win /etc/nginx/win-utf | 配置文件 | 編碼轉換映射轉化文件 |
/etc/nginx/mime.types | 配置文件 | 設置http協議的content-type與擴展名對應關係 |
/usr/lib/systemd/system/nginx-debug.service /usr/lib/systemd/system/nginx.service /etc/sysconfig/nginx /etc/sysconfig-debug | 配置文件 | 用於配置出系統守護進程管理器管理方式 |
/usr/lib64/nginx/modules /etc/nginx/modules | 目錄 | nginx模塊目錄 |
/usr/sbin/nginx /usr/sbin/nginx-debug | 命令 | nginx服務的啓動管理的終端命令 |
/var/cache/nginx | 目錄 | nginx的緩存目錄 |
/var/log/nginx | 目錄 | nginx的日誌目錄 |
nginx.conf是啓動的時候要用到的配置文件,default.conf是ngxin沒有變動的時候的默認配置文件
安裝編譯參數:
默認配置語法
vi /etc/nginx/nginx.conf會看到以下信息:
默認配置和默認站點啓動
命令:systemctl restart nginx.service
額外補充一下systemctl的相關知識。Systemd 並不是一個命令,而是一組命令,涉及到系統管理的方方面面,systemctl是 Systemd 的主命令,用於管理系統。
# 立即啓動一個服務
$ sudo systemctl start nginx.service
# 立即停止一個服務
$ sudo systemctl stop nginx.service
# 重啓一個服務
$ sudo systemctl restart nginx.service
# 殺死一個服務的所有子進程
$ sudo systemctl kill nginx.service
# 重新加載一個服務的配置文件
$ sudo systemctl reload nginx.service
我們看到nginx.conf配置文件中的http中的include包含了default.conf,這裏面配置了很多上圖的一些配置,其中的location /表示說,當只輸入域名不輸入任何路徑的時候,默認會到root配置的目錄中去找index配置中的那些文件。error_page定義了異常應答碼的時候,會主動到location對應的root中去找對應的文件。