<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # nginx實用筆記 * 這是什么 * 為什么用選擇nginx * 安裝及使用nginx * 站點配置 * 域名綁定 * 配置php-fpm * http代理模塊 * 正向代理 * 什么是代理 * http通訊原理 * 拋開nginx代理模塊的本質,ngx\_http\_proxy\_module原理 * 反向代理 * 負載均衡 * url重寫(未寫待續) * url重定向(未寫待續) * 實戰高負載高并發 (nginx+php性能優化) (未寫待續) # 這是什么 > Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,并在一個BSD-like 協議下發行。由俄羅斯的程序設計師Igor Sysoev所開發,供俄國大型的入口網站及搜索引擎Rambler(俄文:Рамблер)使用。其特點是占有內存少,并發能力強,事實上nginx的并發能力確實在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、新浪、網易、騰訊等。 這里都是吹牛逼的,更多吹牛逼資料請看: 百度百科,[http://baike.baidu.com/view/926025.htm](http://baike.baidu.com/view/926025.htm) nginx官網,[http://nginx.org/en/](http://nginx.org/en/) ## 一句話總結 > 這是一個http服務器,同apache一樣,提供web服務。 > 可以做靜態資源服務器,存放html,js,css文件等等, > 還可以配合FastCGI,完成對php文件的解析,實現nginx+php的動態服務。 > 還可以拿來做反向代理,做負載均衡。 # 為什么用選擇nginx Nginx 是一個高性能的 Web 和反向代理服務器, 它具有有很多非常優越的特性: 作為 Web 服務器:相比 Apache,Nginx 使用更少的資源,支持更多的并發連接,體現更高的效率,能夠支持高達 50,000 個并發連接數的響應。 作為負載均衡服務器:Nginx 既可以在內部直接支持 Rails 和 PHP,也可以支持作為 HTTP代理服務器 對外進行服務。 ## 一句話總結 > 因為愛所以愛,愛就選吧~ # 安裝及使用nginx 我是用Ubuntu的,在安裝軟件之前要更新源. ## 更新源 `apt-get update` ## 安裝nigx `apt-get install nginx` 等到他安裝成功 輸入`nginx -v`,查看安裝的版本, ~~~ nginx version: nginx/1.4.6 (Ubuntu) ~~~ ## 一句話總結 無驚無險的安裝完成,能夠愉快的玩耍了。如果沒有錯,直接訪問服務器的ip即可看到, ~~~ Welcome to nginx! ~~~ 我這里用的是`Ubuntu 14.04.4LTS`, 所以安裝的版本是 nginx 1.4.6 。 這里科普下,`LTS`,指,長期支持維護版本。所以在生產環節下,裝軟件都盡量裝帶LTS標志的。而不是安裝最新版。 這樣子出現bug也只是需要更新一下,就可以堵上bug啦 # 站點配置 ## 最基本的站點配置 站點的配置文件夾在這里,`/etc/nginx/sites-available/` 默認的站點文件 `vim /etc/nginx/sites-available/default` 我們可以通過,復制default,這個文件建立一個新的站點。可以理解吧~ ### 最基本的html靜態資源服務器 ~~~ server { # 監聽的端口 listen 80; # www目錄 root /www/default; # 默認首頁(訪問時,沒有指定文件,會自動尋找這些文件,用作顯示) index index.php index.html index.htm; # 域名 http://localhost/ server_name localhost; } ~~~ 這就是一個最簡單的http靜態資源服務器了。 可以在`/www/default/index.html`,建立文件,然后訪問服務器的ip,如果是本地搭建的,訪問`127.0.0.1` ## 綁定域名(也可以說是配置虛擬主機) server\_name,就是為了綁定域名的。 接到請求后的匹配規則 格式是這樣的 `server_name 域名 域名 域名 域名` ### 準確的匹配 ~~~ server_name localhost localhost2 localhost3; ~~~ ### 通配符匹配 ~~~ server_name *.c2567.com; 或者 server_name c2567.*; ~~~ 很顯然`*`就代表任意字符啦. ### 正則表達式匹配 ~~~ server_name ~^(\d)\.c2567\.com$; ~~~ > `~`使用正則表達式 > `()`匹配內容存起來(所謂的子匹配) > `\d`匹配數字 > `.+?`匹配一個或者多個字符,`?`是 非貪婪匹配 > `$`字符串末尾 就先科普這點吧。基本夠用了 ## 配置php-fpm ~~~ server { # 監聽的端口 listen 80; # www目錄 root /www/default; # 默認首頁(訪問時,沒有指定文件,會自動尋找這些文件,用作顯示) index index.php index.html index.htm; # 域名 http://localhost/ server_name localhost; # 在默認的nginx配置中就有下面這段 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { # pathinfo的配置 fastcgi_split_path_info ^(.+\.php)(/.+)$; # 這里就是使用php-fpm sock的連接方式 fastcgi_pass unix:/var/run/php5-fpm.sock; # 默認解析文件名 fastcgi_index index.php; include fastcgi_params; } } ~~~ ### 顯然現在依然不能運行 因為連php都沒有安裝 安裝吧,依然是簡簡單單一步到位的~ `apt-get install php5` `apt-get install php5-fpm` ### 稍微普及下vim的使用方法 狂按esc,可以退回命令模式,命令模式可以輸入命令 #### 文件保存方面 :w 保存 :q 退出 :wq 保存并退出 #### 輸入方面 命令模式下輸入 a , 當前位置輸入 o ,新起一行輸入 #### 一句話總結 會這些已經足夠了完成編輯文件了。 ### 建立一個index.php吧 那么安裝好了以后,建立文件在,`/www/default/index.php` 寫入內容 `vim /usr/share/nginx/html/index.php` 復制下面內容,在vim中, 1. 用方向鍵移動到要輸入的位置 2. 按a進入輸入模式 3. 粘貼內容 4. 按esc,進入vim的命令模式 5. 輸入`:wq`保存 ~~~ <?php phpinfo(); ?> ~~~ 那么,如果沒有意外,訪問服務器地址,`http://127.0.0.1/index.php`, 就會出現phpinfo的信息咯. ### 一句話總結 配置nginx和php,非常簡單,難就難在優化啊,后面我會給講解怎么做基本的優化,在有限的服務器資源下,做到高并發,高負載,依然屹立不倒。 # http代理模塊 ## 參考資料 > ngx\_http\_proxy\_module[http://nginx.org/en/docs/http/ngx\_http\_proxy\_module.html](http://nginx.org/en/docs/http/ngx_http_proxy_module.html) # 正向代理 ## 什么是代理 這里就不說 正向代理跟反向代理有什么區別了,直入主題,代理是什么?代理相當于一個中介,中介是什么鬼,應該都知道吧。 ### http的通訊原理 http協議屬于一問一答的的,所以就是 1對1的通訊。我問你答。 客戶端(問) 服務器(答) 具體點 客戶端->發送報文->服務器->收到報文->處理->服務器返回報文->客戶端收到 ### 一句話總結 形象點說, 我問小明: 你吃飯了嗎。 小明答: 我吃了。 ## 這跟正向代理有什么鬼關系。 既然http是一問一答形式,那么代理服務器是不是起了中轉作用了。 客戶端(問) -> 代理服務器(再問) -> 服務器(答) 具體一點 客戶端->發送報文到代理服務器->代理服務器收到報文 代理服務器(發送客戶端報文)->真正的服務器收到報文并處理->服務器返回處理好的報文給代理服務器 代理服務器收到(把真正服務器返回的報文)-> 發送給客戶端 -> 客戶端收到 ### 一句話總結 形象點說, `我`問`小紅`:小明吃飯了嗎。 `小紅`問`小明`: 吃飯了嗎。 `小明`答`小紅`說:吃了。 `小紅`答`我`說;小明吃了。 ## 最簡單的正向代理 簡單的過程, 客戶端->代理服務器(nginx)->服務器->代理服務器(nginx)->客戶端 ~~~ server { # 設置dns服務器 resolver 114.114.114.114 114.114.114.115; # 監聽端口 listen 2222; location / { # 傳入nginx的變量,實際上是拼接后就是一串url proxy_pass $scheme://$host$request_uri; } } ~~~ ### 設置 DNS 解析 `resolver dns地址 dns地址 dns地址` 如果改成8.8.8.8是不是就能上谷歌了啊,嘿嘿 #### 注意 這不支持https,因為https走的是443端口,是安全傳輸協議,服務器需要同客戶端建立連接,才可以通訊,所以無法中轉的,證書問題。 ## 拋開nginx代理模塊的本質,ngx\_http\_proxy\_module原理 先看這個配置 ~~~ server { listen 99; server_name localhost; location / { proxy_pass http://blog.c2567.com; } } ~~~ 我快速的解釋下, 監聽了`99`端口 域名綁定為`localhost`, 訪問地址 [http://localhost:99/](http://localhost:99/) [http://localhost:99/1.html](http://localhost:99/1.html) [http://localhost:99/2.html](http://localhost:99/2.html) 出現的內容是不是,對應了,我博客的內容啊 [http://blog.c2567.com](http://blog.c2567.com/) [http://blog.c2567.com/1.html](http://blog.c2567.com/1.html) [http://blog.c2567.com/2.html](http://blog.c2567.com/2.html) > ok,了解了這些,那么所謂的正向代理和反向代理,我也不知道這詞是哪里冒出來詞的,反正我讀了好多次都不明白是什么意思,但是這都不重要!因為他本質,即將赤裸裸的展現在我們面前。 再來看看 我們前面做的http代理服務器(正向代理) ~~~ location / { proxy_pass $scheme://$host$request_uri; } ~~~ $scheme 是不是相當于,客戶端傳過來的 http啊 $host 是不是相當于,客戶端傳過來的 域名啊 $request\_uri 是不是相當于,客戶端傳過來的 域名后面的參數啊 > 現在應該看穿nginx的代理了吧,他的本質是不是 客戶端訪問nginx,nginx訪問`proxy_pass`拼接的地址,得到結果,再傳回給客戶端。 > 既然如此,了解了他的本質,是不是改什么都不怕錯了。 > 還有什么鬼,正向代理,反向代理,http代理。各種代理,這詞是不是都不用害怕了。 # 反向代理 > Nginx 作為 web 服務器一個重要的功能就是反向代理。Nginx 反向代理的指令不需要新增額外的模塊,默認自帶 proxy\_pass 指令,只需要修改配置文件就可以實現反向代理。 ## 最簡單的反向代理 ~~~ server { listen 99; server_name localhost; location / { proxy_pass http://blog.c2567.com; } } ~~~ 訪問,`http://localhost:99/`, 就是我的博客啦.這種過程就叫反向代理了. ### 舉個例子 訪問 `http://localhost:99/?page_id=2` 相當于訪問 `http://blog.c2567.com/?page_id=2` 其他的也雷同。 只是吧參數也一同訪問了。實質就是做了一次中轉。 # 負載均衡 簡單來說,就是高級一點的中轉代理。專業點叫`負載均衡`。呵呵。 ## 最簡單的配置 ### 顯示內容的服務器 ~~~ server { listen 83; server_name localhost; location / { root html/3; index index.html index.htm; } } ~~~ 端口設置為81,82,83, web目錄為, ~~~ html/1 html/2 html/3 ~~~ 建立文件 index.html 內容為 ~~~ 我是端口81 我是端口82 我是端口83 ~~~ 以此類推,做出3個服務器,修改端口號和目錄,頁面內容 ### 均衡用的服務器 ~~~ server { listen 99; server_name localhost; location / { proxy_pass http://ss; } } upstream ss { server 127.0.0.1:81; server 127.0.0.1:82; server 127.0.0.1:83; } ~~~ 正如你所看到的,這里定義了3個服務器的地址,對應的訪問內容為。 端口81內容為,`我是端口81` 端口81內容為,`我是端口82` 端口81內容為,`我是端口83` ~~~ server 127.0.0.1:81; server 127.0.0.1:82; server 127.0.0.1:83; ~~~ 很顯然,現在訪問,`http://localhost:99/`,只要多刷新幾次,就能發現內容在變化了,這就是負載均衡。 ## 負載均衡的模式 ### 權重設置`weight=1` ~~~ upstream ss { server 127.0.0.1:81 weight=3; server 127.0.0.1:82 weight=2; server 127.0.0.1:83 weight=1; } ~~~ 顯而易見,參數`weight`,就是權重啦,數值越高,訪問比例越大。 ### 根據訪問的ip分配服務器,`ip_hash` 如果你想,某一個ip訪問某一個服務器,來保證SESSION不丟失。那么加入`ip_hash;`就可以達到目的了。 準確點的解釋,將訪問ip的hash結果分配,每個請求固定訪問一個后端服務器, ~~~ upstream ss { ip_hash; server 127.0.0.1:81; server 127.0.0.1:82; server 127.0.0.1:83; } ~~~ ### 根據壓力自動選擇壓力最小的,`fair` 簡單來說,誰訪問快就訪問誰~ ~~~ upstream ss { fair; server 127.0.0.1:81; server 127.0.0.1:82; server 127.0.0.1:83; } ~~~ 反正我是沒成功報錯了,估計需要安裝這個模塊。 ~~~ nginx: [emerg] unknown directive "fair" ~~~ ## 更多參數 `down`表示單前的server暫時不參與負載. `weight=1`默認為1.weight越大,負載的權重就越大。 `max_fails`允許請求失敗的次數默認為1.當超過最大次數時,返回proxy\_next\_upstream 模塊定義的錯誤. `fail_timeout`如果達到`max_fails`次失敗后,暫停的時間。 ## 例子 ~~~ upstream backend { server 127.0.0.1:81 max_fails=3 fail_timeout=30s; server 127.0.0.1:81 max_fails=3 fail_timeout=30s; server 127.0.0.1:81 max_fails=3 fail_timeout=30s; } ~~~ # url重寫(未寫待續) # url重定向(未寫待續) # 未完待續 > 一次性寫了這么多東西真的好累啊~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看