Nginx知多少系列之(二)安裝

目錄

1.前言

2.安裝

3.配置文件詳解

4.工做原理

5.Linux下託管.NET Core項目

6.Linux下.NET Core項目負載均衡

7.Linux下.NET Core項目Nginx+Keepalived高可用(主從模式)

8.Linux下.NET Core項目Nginx+Keepalived高可用(雙主模式)

9.Linux下.NET Core項目LVS+Keepalived+Nginx高可用集羣

10.構建靜態服務器

11.日誌分析

12.優化策略

13.總結

 

Nginx分爲Linux版和Windows版,相比於Windows,Nginx在Linux性能比較好,並且.NET Core跨平臺,可在Linux下運行。因此這裏主要介紹了Linux版如何安裝,包括指令安裝以及官網下載安裝。html

 

1.下載地址

 

Nginx官網下載地址:http://nginx.org/en/download.htmlpython

 

2.源碼編譯安裝

 

首先咱們在Linux建立Nginx目錄,選擇官網下載地址下載到此目錄,而後解壓,刪除下載文件linux

  

#下載Nginx
sudo wget http://nginx.org/download/nginx-1.16.1.tar.gz

#若是找不到wget,請先安裝
sudo yum -y install wget

#下載完文件在~目錄,而後解壓
sudo tar xvf nginx-1.16.1.tar.gz

#刪除下載文件
sudo rm -f nginx-1.16.1.tar.gz

 

在安裝以前,咱們先須要安裝Nginx須要的環境,否則會編譯準備會不經過nginx

 

#由於安裝nginx須要先將官網下載的源碼進行編譯,編譯依賴gcc環境,若是沒有gcc環境的話,須要安裝gcc。
sudo yum -y install gcc-c++

#prce(Perl Compatible Regular Expressions)是一個Perl庫,包括 perl 兼容的正則表達式庫。nginx的http模塊使用pcre來解析正則表達式,因此須要在linux上安裝pcre庫。
sudo yum install -y pcre pcre-devel

#zlib庫提供了不少種壓縮和解壓縮的方式,nginx使用zlib對http包的內容進行gzip,因此須要在linux上安裝zlib庫。
sudo yum install -y zlib zlib-devel

#OpenSSL 是一個強大的安全套接字層密碼庫,囊括主要的密碼算法、經常使用的密鑰和證書封裝管理功能及SSL協議,並提供豐富的應用程序供測試或其它目的使用。nginx不只支持http協議,還支持https(即在ssl協議上傳輸http),因此須要在linux安裝openssl庫。
sudo yum install -y openssl openssl-devel

 

接下來咱們就要編譯安裝Nginxc++

 

#進入剛剛解壓的文件夾
cd nginx-1.16.1

#爲編譯作準備,若是報錯,缺乏文件,請刪除,從新下載Nginx
sudo ./configure --prefix=/usr/local/nginx

#編譯
sudo make

#安裝
sudo make install

#回到~目錄,而後刪除解壓縮的文件
 cd
sudo rm
-rf nginx-1.16.1

 

已經安裝完畢啦,下面咱們在試試啓動Nginx吧正則表達式

 

#進入sbin目錄
cd /usr/local/nginx/sbin

#執行啓動命令,沒有任何報錯就說明啓動成功
sudo ./nginx

#查看是否啓動成功,查看Nginx進程
ps aux | grep nginx

 

 

 啓動成功啦,咱們來測試下訪問算法

 

 

每次須要執行nginx命令,都要進入/usr/local/nginx/sbin下,是否是以爲比較麻煩?那有沒有別的辦法能夠任意目錄執行命令呢?請看下面的方法:vim

 

①、在這裏咱們能夠設置ln -s 軟連接,這是linux中一個很是重要命令,請你們必定要熟悉。它的功能是爲某一個文件在另一個位置創建一個同不的連接,這個命令最經常使用的參數是-s,具體用法是:ln -s 源文件 目標文件安全

 

#In -s軟連接
sudo ln -s /usr/local/nginx/sbin/* /usr/local/sbin/

 

咱們試試在~目錄只用nginx命令服務器

 

 

這裏nginx -t測試配置信息是否正常,顯示test failed,Permission denied。說明咱們已經找到位置,只是權限的問題。

權限的問題,咱們能夠su而後輸入密碼,進入root,最後在執行nginx -t,可是用root去執行,顯得不夠安全。

咱們也能夠執行下面命令,這樣sudo nginx -t就能執行

 

sudo ln -s /usr/local/nginx/sbin/* /sbin

sudo ln -s /usr/local/nginx/sbin/* /usr/sbin

 

 

②、咱們也能夠把nginx路徑 配置到環境變量裏面就能夠了,這裏仍是會出現sudo nginx找不到命令,因此仍是須要增長In -s軟連接

 

#編輯profile文件
sudo vim /etc/profile

#按i進入編輯,在最後面增長下面內容,而後Esc,:wq保存退出
PATH=$PATH:/usr/local/nginx/sbin
export PATH

#保存好後,咱們要重啓配置才能生效
source /etc/profile

#增長In -s軟連接
sudo ln -s /usr/local/nginx/sbin/* /sbin
sudo ln -s /usr/local/nginx/sbin/* /usr/sbin

 

3.yum安裝

 

#安裝epel
sudo yum -y install epel-release

#安裝Nginx
sudo yum -y install nginx

#啓動Nginx,它不會本身啓動
sudo systemctl start nginx

 

 

 

4.配置nginx的systemctl命令

 

#在 /usr/lib/systemd/system/目錄下面新建一個nginx.service文件。並賦予可執行的權限。
sudo vim /usr/lib/systemd/system/nginx.service

#按i編輯配置文件

#添加下面的配置文件內容

#按ESC,輸入命令保存配置文件

:wq   (保存編輯操做退出)
:wq!  (保存編輯強制退出)

 

[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target

 

下面是帶註釋的配置文件

 

[Unit]                     //對服務的說明
Description=The nginx HTTP and reverse proxy server     //描述服務
After=network.target remote-fs.target nss-lookup.target    //描述服務類別

[Service]    //服務的一些具體運行參數的設置
Type=forking    //後臺運行的形式
PIDFile=/usr/local/nginx/logs/nginx.pid    //PID文件的路徑
ExecStartPre=/usr/local/nginx/sbin/nginx -t    //啓動準備
ExecStart=/usr/local/nginx/sbin/nginx            //啓動命令
ExecReload=/usr/local/nginx/sbin/nginx -s reload   //重啓命令
ExecStop=/usr/local/nginx/sbin/nginx -s stop    //快速中止
PrivateTmp=true                             //給服務分配臨時空間

[Install]
WantedBy=multi-user.target     //服務用戶的模式

 

編輯好配置文件以後,咱們要從新加載下systemctl命令

 

#從新加載systemctl命令
sudo systemctl daemon-reload

#開啓nginx.service服務
sudo systemctl start nginx.service

 

開啓nginx.service服務的時候可能會啓動失敗,而後咱們用前面的命令sudo nginx -s reload,重啓Nginx,會報nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory),這個時候咱們先要找出Nginx的進程,而後在nginx.pid裏面加入master process的進程ID,增長以後,咱們在執行sudo nginx -s quit,讓Nginx平緩中止,最後咱們在開啓Nginx.service 服務。

 

 

#查看Nginx的進程
ps aux | grep nginx

#把Master Process進程的ID寫入nginx.pid裏面
sudo vim /usr/local/nginx/logs/nginx.pid

#按i進入編輯模式,Esc退出編輯,:wq退出保存

#平緩中止Nginx
sudo nginx -s quit

#最後開啓nginx.service服務
sudo systemctl start nginx.service

 

下面咱們看看都有哪些systemctl命令

 

#啓動
systemctl start nginx

#重啓
systemctl reload nginx

#快速中止
systemctl stop nginx

#查看狀態
systemctl status nginx

 

5.開機自啓動/中止

 

#Nginx默認是不主動開啓的,爲了可以在系統啓動就開啓Nginx
sudo systemctl enable nginx

#Nginx中止主動開啓
sudo systemctl disable nginx

 

6.開放80端口

 

#開放端口
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent

#重啓防火牆
sudo firewall-cmd --reload

 

 

 

7.訪問的時候502 Bad Gateway,SELinux配置的問題

 

安全加強型 Linux(Security-Enhanced Linux)簡稱 SELinux,它是一個 Linux 內核模塊,也是 Linux 的一個安全子系統。
SELinux 主要由美國國家安全局開發。2.6 及以上版本的 Linux 內核都已經集成了 SELinux 模塊。
SELinux 的結構及配置很是複雜,並且有大量概念性的東西,要學精難度較大。不少 Linux 系統管理員嫌麻煩都把 SELinux 關閉了。
若是能夠熟練掌握 SELinux 並正確運用,我以爲整個系統基本上能夠到達"堅如盤石"的地步了(請永遠記住沒有絕對的安全)。
掌握 SELinux 的基本概念以及簡單的配置方法是每一個 Linux 系統管理員的必修課。

 

因此出現這個問題有兩種解決方案:

 

①、直接關閉SELinux

 

#進入SELinux目錄
cd /etc/selinux

#編輯selinux config配置文件
sudo vim config

#修改配置:SELINUX=disabled,保存退出

 

保存好以後,從enforcing或permissive改成diabled,須要重啓系統以後才能生效。當咱們重啓以後,能夠看到訪問正常了。

 

②、將Nginx添加至SELinux的白名單

 

yum -y install policycoreutils-python  
cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx  
semodule -i mynginx.pp 

 

8.經常使用命令

①、快速中止Nginx,此方式至關於先查出nginx進程id再使用kill命令強制殺掉進程,不太友好。

 

#進入Nginx目錄
cd /usr/local/nginx/sbin

#中止Nginx
sudo ./nginx -s stop

#若是以前配置了環境,能夠直接任意目錄執行
sudo nginx -s stop

#若是配置了systemctl命令
sudo systemctl stop nginx

 

②、平緩中止,此方式是指容許 nginx 服務將當前正在處理的網絡請求處理完成,但不在接收新的請求,以後關閉鏈接,中止工做。

 

#進入Nginx目錄
cd /usr/local/nginx/sbin

#中止Nginx
sudo ./nginx -s quit

#若是以前配置了環境,能夠直接任意目錄執行
sudo nginx -s quit

 

③、強制殺死進程方式中止

 

#查看Nginx進程
ps aux | grep nginx

#殺死相關進程,殺死nginx主進程和工做進程
sudo kill -9 PID

#進入Nginx目錄
cd /usr/local/nginx/sbin

#啓動Nginx
sudo ./nginx

#若是以前配置了環境,能夠直接任意目錄執行
sudo nginx

#若是以前配置了Systemctl命令
sudo systemctl start nginx

 

④、重啓Nginx,一般咱們使用nginx修改最多的即是其配置文件 nginx.conf。修改以後想要讓配置文件生效而不用重啓 nginx,即可以使用此命令。

 

#進入Nginx目錄
cd /usr/local/nginx/sbin

#重啓Nginx
sudo ./nginx -s reload

#若是以前配置了環境,能夠直接任意目錄執行
sudo nginx -s reload

#若是配置了systemctl命令
sudo systemctl reload nginx

 

⑤、檢測配置文件語法是否正確

 

進入nginx目錄
cd /usr/local/nginx/sbin

#指定須要檢查的配置文件
sudo ./nginx -t -c  /usr/local/nginx/conf/nginx.conf

#不加 -c 參數,默認檢測nginx.conf 配置文件
./nginx -t

#若是以前配置了環境,能夠直接任意目錄執行
sudo nginx -t

 

⑥、查看Nginx版本

 

#進入Nginx目錄
cd /usr/local/nginx/sbin

#查看狀態
./nginx -v

#若是以前配置了環境,能夠直接任意目錄執行
nginx -v

 

⑦、查看詳細版本

 

#進入Nginx目錄
cd /usr/local/nginx/sbin

#查看狀態
./nginx -V

#若是以前配置了環境,能夠直接任意目錄執行
nginx -V
相關文章
相關標籤/搜索