<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Nginx 入門到實戰(zhàn),新手強行發(fā)生。。。

          共 5348字,需瀏覽 11分鐘

           ·

          2021-12-14 19:49

          點擊上方[全棧開發(fā)者社區(qū)]右上角[...][設(shè)為星標(biāo)?

          點擊領(lǐng)取全棧資料全棧資料

          一、環(huán)境

          服務(wù)器版本:CentOS 7.2,為了保證學(xué)習(xí)階段不遇到奇怪的事情,請保證以下四點(大神選擇性無視)

          1. 確認系統(tǒng)網(wǎng)絡(luò)

          2. 確認yum可用

          3. 確認關(guān)閉iptables

          4. 確認停用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ù):

          1. HTTPD-Apache基金會

          2. IIS-微軟

          3. 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ù)

          1. 靜態(tài)資源類型
          非服務(wù)器動態(tài)運行生成的文件,換句話說,就是可以直接在服務(wù)器上找到對應(yīng)文件的請求
          1. 瀏覽器端渲染:HTML,CSS,JS
          2. 圖片:JPEG,GIF,PNG
          3. 視頻:FLV,MPEG
          4. 文件:TXT,任意下載文件
          2. 靜態(tài)資源服務(wù)場景-CDN
          什么是CDN?例如一個北京用戶要請求一個文件,而文件放在的新疆的資源存儲中心,如果直接請求新疆距離太遠,延遲久。使用nginx靜態(tài)資源回源,分發(fā)給北京的資源存儲中心,讓用戶請求的動態(tài)定位到北京的資源存儲中心請求,實現(xiàn)傳輸延遲的最小化
          2. nginx靜態(tài)資源配置
          配置域: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;
          }

          六、瀏覽器緩存

          HTTP協(xié)議定義的緩存機制(如:Expires; Cache-control等 ),減少服務(wù)端的消耗,降低延遲
          1. 瀏覽器無緩存
          瀏覽器請求 -> 無緩存 -> 請求WEB服務(wù)器 -> 請求相應(yīng) -> 呈現(xiàn)
          呈現(xiàn)階段會根據(jù)緩存的設(shè)置在瀏覽器中生成緩存
          2. 瀏覽器有緩存
          瀏覽器請求 -> 有緩存 -> 校驗本地緩存時間是否過期 -> 沒有過期 -> 呈現(xiàn)
          若過期從新請求WEB服務(wù)器
          3. 語法配置
          location?~ .*\.(html|htm)$?{
          ????expires?12h;
          }
          服務(wù)器響應(yīng)靜態(tài)文件時,請求頭信息會帶上 etag 和 last_modified_since 2個標(biāo)簽值,瀏覽器下次去請求時,頭信息發(fā)送這兩個標(biāo)簽,服務(wù)器檢測文件有沒有發(fā)生變化,如無,直接頭信息返 etag 和last_modified_since,狀態(tài)碼為?304?,瀏覽器知道內(nèi)容無改變,于是直接調(diào)用本地緩存,這個過程也請求了服務(wù),但是傳著的內(nèi)容極少。

          七、跨站訪問

          開發(fā) nginx 跨站訪問設(shè)置
          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跨域
          }
          在響應(yīng)中指定 Access-Control-Allow-Credentials 為 true 時,Access-Control-Allow-Origin 不能指定為 *,需要指定到具體域名。
          相關(guān)跨域內(nèi)容可參考 Laravel 跨域功能中間件 使用代碼實現(xiàn)跨域,原理與nginx跨域配置相同

          八、防盜鏈

          防止服務(wù)器內(nèi)的靜態(tài)資源被其他網(wǎng)站所套用,此處介紹的 nginx 防盜鏈為基礎(chǔ)方式,其它更加深入的方式將在之后的文章介紹
          首先,需要理解一個nginx變量
          $http_referer #表示當(dāng)前請求上一次頁面訪問的地址,換句話說,訪問 www.baidu.com 主頁,這是第一次訪問,所以 $http_referer 為空,但是 訪問此頁面的時候還需要獲取一張首頁圖片,再請求這張圖片的時候 $http_referer 就為 www.baidu.com。
          然后配置
          location?~ .*\.(jpg|gif)$?{
          ????valid_referers?none?blocked?127.xxx.xxx.xx
          ????if ($invalid_referer) {
          ????????return?403;
          ????}
          }

          九、HTTP代理服務(wù)

          Nginx可以實現(xiàn)多種代理方式
          • HTTP

          • ICMPPOPIMAP

          • HTTPS

          • RTMP

          1. 代理區(qū)別
          區(qū)別在于代理的對象不一樣,正向代理代理的對象是客戶端,反向代理代理的對象是服務(wù)端
          2. 反向代理
          語法: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)知識。

          來源:https://segmentfault.com/a/1190000014893012

          覺得本文對你有幫助?請分享給更多人

          關(guān)注「全棧開發(fā)者社區(qū)」加星標(biāo),提升全棧技能

          本公眾號會不定期給大家發(fā)福利,包括送書、學(xué)習(xí)資源等,敬請期待吧!

          如果感覺推送內(nèi)容不錯,不妨右下角點個在看轉(zhuǎn)發(fā)朋友圈或收藏,感謝支持。


          好文章,留言、點贊、在看和分享一條龍吧??

          瀏覽 42
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  九九九九精品在线 | 国产女主播一区 | 亚洲欧美性爱在线 | 日日夜夜精品免费看 | 妓女免费网站 |