目錄
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
Nginx官網下載地址:http://nginx.org/en/download.htmlpython
首先咱們在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
#安裝epel sudo yum -y install epel-release #安裝Nginx sudo yum -y install nginx #啓動Nginx,它不會本身啓動 sudo systemctl start nginx
#在 /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
#Nginx默認是不主動開啓的,爲了可以在系統啓動就開啓Nginx
sudo systemctl enable nginx
#Nginx中止主動開啓
sudo systemctl disable nginx
#開放端口 sudo firewall-cmd --zone=public --add-port=80/tcp --permanent #重啓防火牆 sudo firewall-cmd --reload
安全加強型 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
①、快速中止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