nginx官網(wǎng)下載:http://nginx.org/download/
銀河麒麟系統(tǒng)請(qǐng)先檢查yum源是否配置,若沒(méi)有配置請(qǐng)參考:https://qdhhkj.blog.csdn.net/article/details/129680789
一、安裝
1、yum安裝依賴
yum install gcc gcc-c++ make unzip pcre pcre-devel zlib zlib-devel libxml2 libxml2-devel readline readline-devel ncurses ncurses-devel perl-devel perl-ExtUtils-Embed openssl-devel -y
2、下載安裝包并且安裝
wget -c http://nginx.org/download/nginx-1.16.1.tar.gz # 下載
tar -zxvf nginx-1.16.1.tar.gz # 解壓
cd nginx-1.16.1 # 進(jìn)入解壓目錄
# 編譯安裝
./configure
make -j4 && make install
二、啟動(dòng)
# useradd 新增用戶(新增系統(tǒng)用戶,啟動(dòng)nginx時(shí)可以設(shè)置啟動(dòng)user,完整命令格式是:useradd 【用戶組】【用戶名】,
# 如果省略用戶組就會(huì)創(chuàng)建一個(gè)與用戶同名的用戶組,次數(shù)查看/home/目錄,會(huì)發(fā)現(xiàn)多了一個(gè) /home/nginx目錄,
# 同時(shí)/etc/group目錄下會(huì)有一個(gè)nginx用戶組)
useradd nginx
chown nginx:nginx /usr/local/nginx # 給nginx用戶開(kāi)啟nginx安裝目錄權(quán)限
cd /usr/local/nginx/sbin/ # 進(jìn)入ngnix目錄
./nginx -v # 查看版本
./nginx # 啟動(dòng)nginx
ps -ef | grep nginx # 查看是否啟動(dòng)成功,顯示有兩條nginx進(jìn)程就是啟動(dòng)成功了
# 啟動(dòng)是成功了,但是發(fā)現(xiàn)上面新增的系統(tǒng)nginx用戶沒(méi)有用到,放到后面第四條nginx.conf說(shuō)明
在網(wǎng)頁(yè)訪問(wèn)ip即可出現(xiàn)html歡迎頁(yè)面:
三、設(shè)置開(kāi)機(jī)自啟動(dòng)
1、新建nginx.service
手動(dòng)創(chuàng)建文件,創(chuàng)建目錄:/usr/lib/systemd/system/(有的系統(tǒng)創(chuàng)建目錄:/lib/systemd/system/):
vim /usr/lib/systemd/system/nginx.service(按i編輯,:wq保存退出)
添加如下內(nèi)容:
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
Description:描述服務(wù)
After:描述服務(wù)類別
[Service]服務(wù)運(yùn)行參數(shù)的設(shè)置,啟動(dòng)、重啟、停止命令全部要求使用絕對(duì)路徑
Type=forking是后臺(tái)運(yùn)行的形式
ExecStart為服務(wù)的具體運(yùn)行命令
ExecReload為重啟命令
ExecStop為停止命令
PrivateTmp=True表示給服務(wù)分配獨(dú)立的臨時(shí)空間
[Install]運(yùn)行級(jí)別下服務(wù)安裝的相關(guān)設(shè)置,可設(shè)置為多用戶,即系統(tǒng)運(yùn)行級(jí)別為3
2、加入開(kāi)機(jī)啟動(dòng):
systemctl enable nginx # 設(shè)置開(kāi)機(jī)啟動(dòng)
設(shè)置開(kāi)機(jī)啟動(dòng)如果報(bào)錯(cuò):Failed to enable unit: Unit file nginx.service does not exist. 就把nginx.service換另外一個(gè)目錄( /usr/lib/systemd/system/ 或 /lib/systemd/system/ ),如果沒(méi)有報(bào)錯(cuò),可以查看nginx狀態(tài):
systemctl status nginx.service
出現(xiàn)active(running)即代表成功,如果沒(méi)有顯示這個(gè),而是Active: inactive (dead)?那么說(shuō)明沒(méi)有成功,需要重啟nginx(一般情況下是重啟就ok了,有時(shí)候就是需要重啟一次才會(huì)生效):
ps -e | grep nginx # 查看nginx進(jìn)程
kill -9 【進(jìn)程號(hào)】 # 通通殺死
systemctl start nginx # 重啟nginx
systemctl status nginx.service # 再次查看狀態(tài),
3、測(cè)試
3.1 測(cè)試自啟動(dòng)(這里是重啟服務(wù)器!看清楚再執(zhí)行!無(wú)腦執(zhí)行后果自負(fù))
確保服務(wù)器沒(méi)有其他運(yùn)行程序了再重啟測(cè)試
reboot 或者 shutdown -r now
systemctl status nginx.service # 再次查看狀態(tài)是否自啟動(dòng)
可以看到,監(jiān)聽(tīng)了9071端口。
3.2 測(cè)試nginx監(jiān)聽(tīng)端口
ps -aux | grep nginx # 查看nginx進(jìn)程編號(hào)
netstat -anp | grep 【進(jìn)程號(hào)】 # 輸入查詢的進(jìn)程號(hào),即可 查詢nginx監(jiān)聽(tīng)的端口
netstat -lntp # 查看所有被監(jiān)聽(tīng)的端口
4、停止開(kāi)機(jī)啟動(dòng)
systemctl disable nginx
四、卸載nginx版本
注意卸載,千萬(wàn)要先備份nginx.conf配置文件?。。?/strong>
1、查看nginx服務(wù)情況
ps -ef | grep nginx
2、關(guān)閉服務(wù)
/usr/local/nginx/sbin/nginx -s quit
3、如果服務(wù)加入了自啟動(dòng),則刪除服務(wù)
chkconfig nginx off
4、刪除nginx文件
find / -name nginx # 使用find命令搜索文件
rm -rf 文件 # 刪除文件
5、如果使用yum按照的則使用命令刪除依賴
若刪除后是為了重裝那么不要?jiǎng)h除依賴
yum remove nginx
五、配置文件nginx.conf
上面啟動(dòng)成功是沒(méi)有問(wèn)題,但是發(fā)現(xiàn)你的項(xiàng)目放哪里?監(jiān)聽(tīng)的端口是不是你想要的?使用nginx最重要的就是配置文件nginx.conf,按上面的安裝方法,配置文件一般會(huì)自動(dòng)安裝在:/usr/local/nginx/conf/nginx.conf下,或者find搜索:find / -name nginx.conf 記下目錄即可,nginx.conf系統(tǒng)自動(dòng)安裝生成的文件建議不要輕易移動(dòng),使用systemctl 命令啟動(dòng)/重啟系統(tǒng)會(huì)去自動(dòng)查找,一旦移動(dòng)那么啟動(dòng)nginx時(shí)就要指定nginx.conf的路徑了, 但是這里建議把nginx.conf軟鏈接放到/usr/local/nginx/conf/nginx.conf,真正的nginx.conf放到我們項(xiàng)目統(tǒng)一管理目錄下即可:
mv /usr/local/nginx/conf/nginx.conf /home/【你的項(xiàng)目管理目錄】 # 移動(dòng)配置文件到項(xiàng)目管理目錄
ln -s /home/【你的項(xiàng)目管理目錄】/nginx.conf /usr/local/nginx/conf/ # 創(chuàng)建軟連接到nginx系統(tǒng)自動(dòng)安裝目錄,一定要有參數(shù) -s
# 如果你移動(dòng)了文件卻沒(méi)有創(chuàng)建軟連接那么nginx只能手動(dòng)指定nginx.conf路徑,但是這種方式就無(wú)法實(shí)現(xiàn)開(kāi)機(jī)自動(dòng)啟動(dòng)
./nginx /home/【你的項(xiàng)目管理目錄】/nginx.conf
1、配置文件的結(jié)構(gòu)
總體結(jié)構(gòu)分三部分,全局塊,events塊和http塊,必須要修改的是http塊,其他塊根據(jù)業(yè)務(wù)需求修改。events塊和http塊都會(huì)用{…}包裹,沒(méi)有{…}包裹的代碼就是全局塊main
2、全局塊
全局塊沒(méi)有{…}包裹,一般從默認(rèn)配置文件從開(kāi)始到events塊之間的部分, 設(shè)置nginx整體運(yùn)行的配置指令,這些指令的作用域是全局, 其中第一行便是設(shè)置運(yùn)行nginx的系統(tǒng)用戶user,就是上面 useradd nginx 命令創(chuàng)建的用戶:
#定義Nginx運(yùn)行的用戶和用戶組,這里就可以定義上面 useradd nginx 創(chuàng)建的系統(tǒng)用戶,如果沒(méi)有設(shè)置就是,nobody,也不影響nigix啟動(dòng)。
user www www;
#nginx進(jìn)程數(shù),建議設(shè)置為等于CPU總核心數(shù)。
worker_processes 8;
#全局錯(cuò)誤日志定義類型,[ debug | info | notice | warn | error | crit ]
error_log /usr/local/nginx/logs/error.log info;
#進(jìn)程pid文件
pid /usr/local/nginx/logs/nginx.pid;
#指定進(jìn)程可以打開(kāi)的最大描述符:數(shù)目
#工作模式與連接數(shù)上限
#這個(gè)指令是指當(dāng)一個(gè)nginx進(jìn)程打開(kāi)的最多文件描述符數(shù)目,理論值應(yīng)該是最多打開(kāi)文件數(shù)(ulimit -n)與nginx進(jìn)程數(shù)相除,但是nginx分配請(qǐng)求并不是那么均勻,所以最好與ulimit -n 的值保持一致。
#現(xiàn)在在linux 2.6內(nèi)核下開(kāi)啟文件打開(kāi)數(shù)為65535,worker_rlimit_nofile就相應(yīng)應(yīng)該填寫(xiě)65535。
#這是因?yàn)閚ginx調(diào)度時(shí)分配請(qǐng)求到進(jìn)程并不是那么的均衡,所以假如填寫(xiě)10240,總并發(fā)量達(dá)到3-4萬(wàn)時(shí)就有進(jìn)程可能超過(guò)10240了,這時(shí)會(huì)返回502錯(cuò)誤。
worker_rlimit_nofile 65535;
3、events塊
ewents塊都在ewents {…}包裹之下,的指令主要影響nginx服務(wù)器和用戶的網(wǎng)絡(luò)連接,對(duì)性能影響較大。
3.1 常用設(shè)置指令
events {
worker_connections 1024; #每個(gè)工作進(jìn)程的最大連接數(shù)量(根據(jù)硬件調(diào)整,和前面工作進(jìn)程配合起來(lái)用,盡量大,但是別把cpu跑到100%就行。)
use epoll; # 使用epoll的I/O 模型。linux建議epoll,F(xiàn)reeBSD建議采用kqueue,window下不指定。
accept_mutex on; #開(kāi)啟網(wǎng)絡(luò)連接的序列化(防止多個(gè)進(jìn)程對(duì)連接的爭(zhēng)搶)
multi_accept on; #允許同時(shí)接收多個(gè)網(wǎng)絡(luò)連接(默認(rèn)關(guān)閉),工作進(jìn)程都有能力同時(shí)接收多個(gè)新到達(dá)的網(wǎng)絡(luò)連接
}
3.2 其他設(shè)置指令
events
{
#參考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型
#是Linux 2.6以上版本內(nèi)核中的高性能網(wǎng)絡(luò)I/O模型,linux建議epoll,如果跑在FreeBSD上面,就用kqueue模型。
#補(bǔ)充說(shuō)明:
#與apache相類,nginx針對(duì)不同的操作系統(tǒng),有不同的事件模型
#A)標(biāo)準(zhǔn)事件模型
#Select、poll屬于標(biāo)準(zhǔn)事件模型,如果當(dāng)前系統(tǒng)不存在更有效的方法,nginx會(huì)選擇select或poll
#B)高效事件模型
#Kqueue:使用于FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X.使用雙處理器的MacOS X系統(tǒng)使用kqueue可能會(huì)造成內(nèi)核崩潰。
#Epoll:使用于Linux內(nèi)核2.6版本及以后的系統(tǒng)。
#/dev/poll:使用于Solaris 7 11/99+,HP/UX 11.22+ (eventport),IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+。
#Eventport:使用于Solaris 10。 為了防止出現(xiàn)內(nèi)核崩潰的問(wèn)題, 有必要安裝安全補(bǔ)丁。
use epoll;
#單個(gè)進(jìn)程最大連接數(shù)(最大連接數(shù)=連接數(shù)*進(jìn)程數(shù))
#根據(jù)硬件調(diào)整,和前面工作進(jìn)程配合起來(lái)用,盡量大,但是別把cpu跑到100%就行。每個(gè)進(jìn)程允許的最多連接數(shù),理論上每臺(tái)nginx服務(wù)器的最大連接數(shù)為。
worker_connections 65535;
#keepalive超時(shí)時(shí)間。
keepalive_timeout 60;
#客戶端請(qǐng)求頭部的緩沖區(qū)大小。這個(gè)可以根據(jù)你的系統(tǒng)分頁(yè)大小來(lái)設(shè)置,一般一個(gè)請(qǐng)求頭的大小不會(huì)超過(guò)1k,不過(guò)由于一般系統(tǒng)分頁(yè)都要大于1k,所以這里設(shè)置為分頁(yè)大小。
#分頁(yè)大小可以用命令getconf PAGESIZE 取得。
#[root@web001 ~]# getconf PAGESIZE
#4096
#但也有client_header_buffer_size超過(guò)4k的情況,但是client_header_buffer_size該值必須設(shè)置為“系統(tǒng)分頁(yè)大小”的整倍數(shù)。
client_header_buffer_size 4k;
#這個(gè)將為打開(kāi)文件指定緩存,默認(rèn)是沒(méi)有啟用的,max指定緩存數(shù)量,建議和打開(kāi)文件數(shù)一致,inactive是指經(jīng)過(guò)多長(zhǎng)時(shí)間文件沒(méi)被請(qǐng)求后刪除緩存。
open_file_cache max=65535 inactive=60s;
#這個(gè)是指多長(zhǎng)時(shí)間檢查一次緩存的有效信息。
#語(yǔ)法:open_file_cache_valid time 默認(rèn)值:open_file_cache_valid 60 使用字段:http, server, location 這個(gè)指令指定了何時(shí)需要檢查open_file_cache中緩存項(xiàng)目的有效信息.
open_file_cache_valid 80s;
#open_file_cache指令中的inactive參數(shù)時(shí)間內(nèi)文件的最少使用次數(shù),如果超過(guò)這個(gè)數(shù)字,文件描述符一直是在緩存中打開(kāi)的,如上例,如果有一個(gè)文件在inactive時(shí)間內(nèi)一次沒(méi)被使用,它將被移除。
#語(yǔ)法:open_file_cache_min_uses number 默認(rèn)值:open_file_cache_min_uses 1 使用字段:http, server, location 這個(gè)指令指定了在open_file_cache指令無(wú)效的參數(shù)中一定的時(shí)間范圍內(nèi)可以使用的最小文件數(shù),如果使用更大的值,文件描述符在cache中總是打開(kāi)狀態(tài).
open_file_cache_min_uses 1;
#語(yǔ)法:open_file_cache_errors on | off 默認(rèn)值:open_file_cache_errors off 使用字段:http, server, location 這個(gè)指令指定是否在搜索一個(gè)文件時(shí)記錄cache錯(cuò)誤.
open_file_cache_errors on;
}
4、http塊
http塊都在http {…}包裹之下,http塊分全局http塊和server塊。
4.1 http全局塊
http全局塊是nginx服務(wù)配置中的重要部分,代理、緩存、日志定義等很多的功能指令都可以放在http全局塊中
#文件擴(kuò)展名與文件類型映射表
include mime.types;
#默認(rèn)文件類型
default_type application/octet-stream;
#默認(rèn)編碼
#charset utf-8;
#服務(wù)器名字的hash表大小
#保存服務(wù)器名字的hash表是由指令server_names_hash_max_size 和server_names_hash_bucket_size所控制的。參數(shù)hash bucket size總是等于hash表的大小,并且是一路處理器緩存大小的倍數(shù)。在減少了在內(nèi)存中的存取次數(shù)后,使在處理器中加速查找hash表鍵值成為可能。如果hash bucket size等于一路處理器緩存的大小,那么在查找鍵的時(shí)候,最壞的情況下在內(nèi)存中查找的次數(shù)為2。第一次是確定存儲(chǔ)單元的地址,第二次是在存儲(chǔ)單元中查找鍵 值。因此,如果Nginx給出需要增大hash max size 或 hash bucket size的提示,那么首要的是增大前一個(gè)參數(shù)的大小.
server_names_hash_bucket_size 128;
#客戶端請(qǐng)求頭部的緩沖區(qū)大小。這個(gè)可以根據(jù)你的系統(tǒng)分頁(yè)大小來(lái)設(shè)置,一般一個(gè)請(qǐng)求的頭部大小不會(huì)超過(guò)1k,不過(guò)由于一般系統(tǒng)分頁(yè)都要大于1k,所以這里設(shè)置為分頁(yè)大小。分頁(yè)大小可以用命令getconf PAGESIZE取得。
client_header_buffer_size 32k;
#客戶請(qǐng)求頭緩沖大小。nginx默認(rèn)會(huì)用client_header_buffer_size這個(gè)buffer來(lái)讀取header值,如果header過(guò)大,它會(huì)使用large_client_header_buffers來(lái)讀取。
large_client_header_buffers 4 64k;
#設(shè)定通過(guò)nginx上傳文件的大小
client_max_body_size 8m;
#開(kāi)啟高效文件傳輸模式,sendfile指令指定nginx是否調(diào)用sendfile函數(shù)來(lái)輸出文件,對(duì)于普通應(yīng)用設(shè)為 on,如果用來(lái)進(jìn)行下載等應(yīng)用磁盤(pán)IO重負(fù)載應(yīng)用,可設(shè)置為off,以平衡磁盤(pán)與網(wǎng)絡(luò)I/O處理速度,降低系統(tǒng)的負(fù)載。注意:如果圖片顯示不正常把這個(gè)改成off。
#sendfile指令指定 nginx 是否調(diào)用sendfile 函數(shù)(zero copy 方式)來(lái)輸出文件,對(duì)于普通應(yīng)用,必須設(shè)為on。如果用來(lái)進(jìn)行下載等應(yīng)用磁盤(pán)IO重負(fù)載應(yīng)用,可設(shè)置為off,以平衡磁盤(pán)與網(wǎng)絡(luò)IO處理速度,降低系統(tǒng)uptime。
sendfile on;
#開(kāi)啟目錄列表訪問(wèn),適合下載服務(wù)器,默認(rèn)關(guān)閉。
autoindex on;
4.2 server塊
server塊 必須包含在http之下,server可寫(xiě)多個(gè)在http塊下引用即可,實(shí)現(xiàn)多個(gè)監(jiān)聽(tīng)端口文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-766563.html
server {
# 監(jiān)聽(tīng)端口,其他端口不用寫(xiě)ssl,例如 listen 9071; 這里也可以帶IP: listen 120.166.**.**:9071
listen 443 ssl;
# 監(jiān)聽(tīng)域名或者ip,也可以寫(xiě)ip:server_name 120.166.**.**; 但是如果 listen 中如果帶有ip,那么這里就會(huì)失去意義。
server_name www.qd-hhkj.com;
# 如果http 下有個(gè)多個(gè)server監(jiān)聽(tīng),那么錯(cuò)誤日志也可以配置到這里,便于按監(jiān)聽(tīng)端口分檔管理
error_log /usr/local/nginx/logs/error.log info;
# ssl 證書(shū)相關(guān),一般會(huì)在項(xiàng)目的最前端配置,比如如果使用了全球加速,那么應(yīng)該在加速配置文件設(shè)置,不一定必須在nginx配置
# ssl證書(shū)地址
#指定pem文件所在路徑,如果寫(xiě)相對(duì)路徑,必須把該文件和nginx.conf文件放到一個(gè)目錄下。
# ssl_certificate ssl.pem;
#指定私鑰文件key所在路徑,如果寫(xiě)相對(duì)路徑,必須把該文件和nginx.conf文件放到一個(gè)目錄下。
# ssl_certificate_key ssl.key;
# ssl驗(yàn)證相關(guān)配置
# ssl_session_timeout 5m; #緩存有效期
# ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密算法
# ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #安全鏈接可選的加密協(xié)議
# ssl_prefer_server_ciphers on; #使用服務(wù)器端的首選算法
location / {
root /home/item/dist; # 項(xiàng)目文件index.html的目錄,模式是nginx的安裝目錄下的html目錄
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
# 設(shè)置被代理服務(wù)器端口或者套接字(設(shè)置后端服務(wù)監(jiān)聽(tīng)的ip和端口,通俗點(diǎn)講就是去哪里獲取數(shù)據(jù))
location /prod-api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://10.56.1.75:8080/; # 服務(wù)端地址和監(jiān)聽(tīng)端口,可以加path參數(shù),比如:proxy_pass http://10.56.1.75:8080/api
}
#配置重定向,一般會(huì)在項(xiàng)目的最前端配置,比如如果使用了全球加速,那么應(yīng)該在加速配置設(shè)置,不一定必須在nginx配置
server {
listen 80;
server_name localhost;
#用地址重寫(xiě)規(guī)則
rewrite ^(.*)$ https://${server_name}$1 permanent;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
六、銀河麒麟本地防火墻開(kāi)啟監(jiān)聽(tīng)端口
上面nginx啟動(dòng)后,經(jīng)過(guò) systemctl status nginx查詢nginx也是正常運(yùn)行狀態(tài),但是外網(wǎng)仍然無(wú)法訪問(wèn),那么就要看一下你的端口了,首先應(yīng)與運(yùn)維溝通下或者看一下你的服務(wù)器管理后臺(tái)是否已經(jīng)開(kāi)啟了外網(wǎng)防火墻端口,如果開(kāi)啟了,那么就是本地服務(wù)器防火墻端口沒(méi)有開(kāi)放了:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-766563.html
systemctl status firewalld # 查看防火墻狀態(tài),或者用:firewall-cmd --state
firewall-cmd --zone=public --list-ports #查看開(kāi)放的端口列表
firewall-cmd --query-port=80/tcp # 查看防火墻80端口是否開(kāi)放
# 放行指定端口
firewall-cmd --zone=public --add-port=80/tcp --permanent # http # 放行80端口
firewall-cmd --zone=public --add-port=443/tcp --permanent # https # 放行443端口
firewall-cmd --zone=public --add-port=8000-9000/tcp --permanent # 放行8000-9000端口范圍
# 刪除防火墻端口
firewall-cmd --zone=public --remove-port=8000-8888/tcp --permanent
# 在放行端口或者是關(guān)閉端口后,都要對(duì)防火墻進(jìn)行刷新!?。。。。。。。。。?!
firewall-cmd --reload
systemctl start firewalld # 開(kāi)啟防火墻,一般不要這么干
systemctl stop firewalld # 關(guān)閉防火墻
到了這里,關(guān)于銀河麒麟v10sp2安裝/卸載/配置nginx和本地防火墻設(shè)置的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!