Nginx 入門到實戰(zhàn),新手強行發(fā)生。。。
點擊上方[全棧開發(fā)者社區(qū)]→右上角[...]→[設(shè)為星標(biāo)?
點擊領(lǐng)取全棧資料:全棧資料
一、環(huán)境
服務(wù)器版本:CentOS 7.2,為了保證學(xué)習(xí)階段不遇到奇怪的事情,請保證以下四點(大神選擇性無視)
確認系統(tǒng)網(wǎng)絡(luò)
確認yum可用
確認關(guān)閉iptables
確認停用selinux
#查看iptables狀態(tài)
systemctl status firewalld.service
#關(guān)閉防火墻(臨時關(guān)閉)
systemctl stop firewalld.service
#查看SELinux狀態(tài)
getenforce
#臨時關(guān)閉SELinux
setenforce 0
安裝一些系統(tǒng)基本工具,正常情況系統(tǒng)都會自帶(沒有在裝哦)
yum -y install?gcc gcc-c++ autoconf pcre pcre-devel make automake
yum -y install?wget httpd-tools vim
二、Nginx是什么?
Nginx是一個開源且高性能、可靠的HTTP中間件、代理服務(wù) 其他的HTTP服務(wù):
HTTPD-Apache基金會
IIS-微軟
GWS-Google(不對外開放)
近幾年,Nginx的市場占有率越來越高,一度飆升,為什么呢?接下來我們就知道了!三、我們?yōu)槭裁催x擇Nginx?
1. IO多路復(fù)用epoll(IO復(fù)用)
如何理解呢?舉個例子吧!有A、B、C三個老師,他們都遇到一個難題,要幫助一個班級的學(xué)生解決課堂作業(yè)。
老師A采用從第一排開始一個學(xué)生一個學(xué)生輪流解答的方式去回答問題,老師A浪費了很多時間,并且有的學(xué)生作業(yè)還沒有完成呢,老師就來了,反反復(fù)復(fù)效率極慢。
老師B是一個忍者,他發(fā)現(xiàn)老師A的方法行不通,于是他使用了影分身術(shù),分身出好幾個自己同一時間去幫好幾個同學(xué)回答問題,最后還沒回答完,老師B消耗光了能量累倒了。
老師C比較精明,他告訴學(xué)生,誰完成了作業(yè)舉手,有舉手的同學(xué)他才去指導(dǎo)問題,他讓學(xué)生主動發(fā)聲,分開了“并發(fā)”。這個老師C就是Nginx。
2. 輕量級
功能模塊少 - Nginx僅保留了HTTP需要的模塊,其他都用插件的方式,后天添加
代碼模塊化 - 更適合二次開發(fā),如阿里巴巴Tengine
3. CPU親和
把CPU核心和Nginx工作進程綁定,把每個worker進程固定在一個CPU上執(zhí)行,減少切換CPU的cache miss,從而提高性能。
三、安裝與目錄
本人使用了鳥哥的lnmp集成包,簡單方便-推薦!
#執(zhí)行這句語句,根據(jù)指引,將安裝 nginx php mysql 可進入lnmp官網(wǎng)查看更詳細的過程
#默認安裝目錄/usr/local
wget -c http://soft.vpser.net/lnmp/lnmp1.4.tar.gz && tar zxf lnmp1.4.tar.gz && cd lnmp1.4 && ./install.sh lnmp
#默認安裝目錄
/usr/local
四、基本配置
#打開主配置文件,若你是用lnmp環(huán)境安裝
vim?/usr/local/nginx/conf/nginx.conf
----------------------------------------
user #設(shè)置nginx服務(wù)的系統(tǒng)使用用戶
worker_processes #工作進程數(shù) 一般情況與CPU核數(shù)保持一致
error_log #nginx的錯誤日志
pid #nginx啟動時的pid
events {
????worker_connections????#每個進程允許最大連接數(shù)
????use #nginx使用的內(nèi)核模型
}
我們使用 nginx 的 http 服務(wù),在配置文件 nginx.conf 中的 http 區(qū)域內(nèi),配置無數(shù)個 server ,每一個 server 對應(yīng)這一個虛擬主機或者域名
http {
????... ... #后面再詳細介紹 http 配置項目
????
????server {
????????listen 80 #監(jiān)聽端口;
????????server_name localhost #地址
????????
????????location / { #訪問首頁路徑
????????????root /xxx/xxx/index.html #默認目錄
????????????index index.html index.htm #默認文件
????????}
????????
????????error_page 500 504 /50x.html #當(dāng)出現(xiàn)以上狀態(tài)碼時從新定義到50x.html
????????location = /50x.html { #當(dāng)訪問50x.html時
????????????root /xxx/xxx/html #50x.html 頁面所在位置
????????}
????}
????
????server {
????????... ...
????}
}
一個 server 可以出現(xiàn)多個 location ,我們對不同的訪問路徑進行不同情況的配置 我們再來看看 http 的配置詳情
http?{
????sendfile??on??????????????????#高效傳輸文件的模式 一定要開啟
????keepalive_timeout 65????????#客戶端服務(wù)端請求超時時間
????log_format main XXX #定義日志格式 代號為main
????access_log /usr/local/access.log main #日志保存地址 格式代碼 main
}
四、模塊
查看 nginx 已開啟和編聯(lián)進去的模塊,模塊太多了,就不在這長篇大論,有需要自行百度吧~
#大寫V查看所有模塊,小寫v查看版本
nginx -V
#?查看此配置文件 是否存在語法錯誤
nginx -tc /usr/local/nginx/conf/nginx.conf
五、靜態(tài)資源 Web 服務(wù)
配置域:http、server、location http?{
?????sendfile???on;
}
http?{
?????sendfile???on;
?????tcp_nopush?on;
}
http?{
?????sendfile???on;
?????tcp_nopush?on;
?????tcp_nodelay?on;
}
location?~ .*\.(gif|jpg)$?{
????gzip?on;
????gzip_http_version?1.1;
????gzip_comp_level?2;
????gzip_types???text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss image/jpeg image/gif image/png;
????root?/opt/app/code;
}
location?~ load^/download?{
????gzip_static?on?
????tcp_nopush on;
????root?/opt/app/code;
}
六、瀏覽器緩存
location?~ .*\.(html|htm)$?{
????expires?12h;
}
七、跨站訪問
location?~ .*\.(html|htm)$?{
?????add_header?Access-Control-Allow-Origin *;
?????add_header?Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
?????#Access-Control-Allow-Credentials true #允許cookie跨域
}
八、防盜鏈
location?~ .*\.(jpg|gif)$?{
????valid_referers?none?blocked?127.xxx.xxx.xx
????if ($invalid_referer) {
????????return?403;
????}
}
九、HTTP代理服務(wù)
HTTP
ICMPPOPIMAP
HTTPS
RTMP
語法:proxy_pass URL
默認:——
位置:loaction
server {
????listen 80;
????location / {
????????proxy_pass http://127.0.0.1:8080/;
????????proxy_redirect default;
????????
????????proxy_set_header Host $http_host;
????????proxy_set_header X-Real-IP $remote_addr;
????????
????????proxy_connect_timeout 30;
????????proxy_send_timeout 60;
????????proxy_read_timeout 60;
????????
????????proxy_buffer_size 32k;
????????proxy_buffering on;
????????proxy_buffers 4?128k;
????????proxy_busy_buffers_size 256k;
????????proxy_max_temp_file_size 256k;
????}
}
本文介紹了 Nginx 相關(guān)配置和場景,后面文章會介紹負載均衡和緩存服務(wù)相關(guān)知識。
覺得本文對你有幫助?請分享給更多人
關(guān)注「全棧開發(fā)者社區(qū)」加星標(biāo),提升全棧技能
本公眾號會不定期給大家發(fā)福利,包括送書、學(xué)習(xí)資源等,敬請期待吧!
如果感覺推送內(nèi)容不錯,不妨右下角點個在看轉(zhuǎn)發(fā)朋友圈或收藏,感謝支持。
好文章,留言、點贊、在看和分享一條龍吧??

