1. 程式人生 > >Linux - nginx基礎及常用操作

Linux - nginx基礎及常用操作

readline clu 頁面優化 epoll usr taobao system32 俄羅斯 zlib

目錄

  • Linux - nginx基礎及常用操作
    • Tengine淘寶nginx安裝流程
    • nginx的主配置文件nginx.conf
    • 基於域名的多虛擬主機實戰
    • nginx的訪問日誌功能
    • 網站的404頁面優化
    • 拒絕某些ip訪問
    • nginx的反向代理
      • nginx反向代理的實現
    • nginx負載均衡簡單實現

Linux - nginx基礎及常用操作

nginx是一個開源的,支持高性能,高並發的www服務和代理服務軟件。它是一個俄羅斯人lgor sysoev開發的,作者將源代碼開源出來供全球使用。
nginx比它大哥apache性能改進許多,nginx占用的系統資源更少,支持更高的並發連接,有更高的訪問效率。
nginx不但是一個優秀的web服務軟件,還可以作為反向代理,負載均衡,以及緩存服務使用。
安裝更為簡單,方便,靈活。
nginx可以說是非常nb了
  • 支持高並發,能支持幾萬並發連接
  • 資源消耗少,在3萬並發連接下開啟10個nginx線程消耗的內存不到200M
  • 可以做http反向代理和負載均衡
  • 支持異步網絡i/o事件模型epoll

技術分享圖片

Tengine是由淘寶網發起的Web服務器項目。它在Nginx的基礎上,針對大訪問量網站的需求,添加了很多高級功能和特性。Tengine的性能和穩定性已經在大型的網站如淘寶網,天貓商城等得到了很好的檢驗。它的最終目標是打造一個高效、穩定、安全、易用的Web平臺。

Tengine淘寶nginx安裝流程

1.淘寶nginx的學習使用,安裝

下載源碼包

cd /opt

wget -c http://tengine.taobao.org/download/tengine-2.2.0.tar.gz

2.卸載掉之前,學習yum時候,安裝的nginx軟件,

yum remove nginx -y 

3。解決編譯安裝nginx的軟件依賴

yum install gcc patch libffi-devel python-devel  zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y

4.解壓縮源碼包,安裝

解壓

tar -zxvf tengine-2.2.0.tar.gz

源碼編譯安裝三部曲

cd  tengine-2.2.0

    1.釋放makefile

    ./configure --prefix=/opt/tnginx220

cd tnginx220

    2.編譯nginx

    make 

    3.編譯安裝

    make install 

4.編譯完成後,tnginx就可以用了

學習nginx的代碼目錄結構

[root@master tnginx220]# pwd

/opt/tnginx220

[root@master tnginx220]#

[root@master tnginx220]# ll

total 8

drwx------. 2 nobody root    6 Mar 11 08:51 client_body_temp

drwxr-xr-x. 2 root   root 4096 Mar 11 08:50 conf                #放nginx所有配置文件的地兒

drwx------. 2 nobody root    6 Mar 11 08:51 fastcgi_temp

drwxr-xr-x. 2 root   root   40 Mar 11 08:50 html                #存放前端 html文件的      

drwxr-xr-x. 2 root   root 4096 Mar 11 08:50 include

drwxr-xr-x. 2 root   root   41 Mar 11 08:52 logs                #nginx的日誌文件夾

drwxr-xr-x. 2 root   root    6 Mar 11 08:50 modules

drwx------. 2 nobody root    6 Mar 11 08:51 proxy_temp

drwxr-xr-x. 2 root   root   35 Mar 11 08:50 sbin                #存放nginx二進制命令的

drwx------. 2 nobody root    6 Mar 11 08:51 scgi_temp

drwx------. 2 nobody root    6 Mar 11 08:51 uwsgi_temp

5.啟動淘寶nginx

./nginx 

6.添加linux的PATH變量,快捷使用nginx命令

echo $PATH  

PATH="/opt/python36/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/tnginx220/sbin"

永久添加變量環境:

 vim ~/.bash_profile

修改/etc/profile文件,通過vi或vim增加變量

nginx的主配置文件nginx.conf

http內核模塊

//公共的配置定義在http{}

http {  //http層開始

...    

    //使用Server配置網站, 每個Server{}代表一個網站(簡稱虛擬主機)

    'server' {

        listen       80;        //監聽端口, 默認80

        server_name  localhost; //提供服務的域名或主機名

        access_log host.access.log  //訪問日誌

        //控制網站訪問路徑

        'location' / {

            root   /usr/share/nginx/html;   //存放網站代碼路徑

            index  index.html index.htm;    //服務器返回的默認頁面文件

        }

        //指定錯誤代碼, 統一定義錯誤頁面, 錯誤代碼重定向到新的Locaiton

        error_page   500 502 503 504  /50x.html;

    }

    ...

    //第二個虛擬主機配置

    'server' {

    ...

    }

    

    include /etc/nginx/conf.d/*.conf;  //包含/etc/nginx/conf.d/目錄下所有以.conf結尾的文件

}   //http層結束

基於域名的多虛擬主機實戰

一個服務器上,可以運行兩個乃至多個網站

註意: 防火墻端口問題

1.環境準備,準備好2個域名 ,這裏是模擬的本地域名解析 ,找到hosts文件
由於我們是想配置windows,可以訪問不同的 域名,因此配置windows的hosts

    192.168.11.65  dnf.com 

    192.168.11.65  xiaohua.com

  編輯文件 C:\Windows\System32\drivers\etc\hosts
寫入

2.配置nginx支持多虛擬主機

修改nginx.conf 修改2個server虛擬主機的配置

dnf的虛擬主機

server {

    listen 80;

    server_name  dnf.com;

    # 當我們訪問s17dnf.com:80/的時候,就進入這個虛擬主機,且找到這個location,進行網站資源分配

    location / {

        root /opt/s17dnf/;

        index index.html;

    }

}

第二個虛擬主機,s17校花網

server{

    listen 80;

    server_name  xiaohua.com;

    

    location / {
        root /opt/s17xiaohua/;
        index index.html;
    }

}

分別修改兩個網址的根目錄數據

mkdir -p /opt/{s17dnf,s17xiaohua}

分別在/opt/s17dnf/創建index.html 

/opt/s17xiaohua/創建index.html  

3.修改完配置文件,檢測語法

nginx -t  

4.平滑加載nginx(不重啟nginx,重新讀取配置文件)

nginx -s reload  

nginx的訪問日誌功能

編輯 nginx.conf

打開註釋

http {

    include       mime.types;

    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
              '$status $body_bytes_sent "$http_referer" '
              '"$http_user_agent" "$http_x_forwarded_for"';

access_log  logs/access.log  main;

...

網站的404頁面優化

1.編輯nginx.conf ,配置如下:

server {
    listen       80;
    server_name  s17dnf.com;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {
        root   /opt/s17dnf;
        index  index.html index.htm;
    }
    #打開這個參數的配置,開啟錯誤頁面  
    error_page  404           /404.html;
    error_page  401 402 403           /403.html;
    }

2.編輯/opt/s17dnf下 HTML文件

拒絕某些ip訪問

 location / {

            deny  你想限制的ip;

            root   /opt/s17dnf;

            index  index.html index.htm;

        }

nginx的反向代理

技術分享圖片

nginx反向代理的實現

1.實驗環境準備

192.168.11.229   真實資源服務器,模擬django       ,理解為房東的房屋資源 

192.168.11.136   nginx代理服務器                 ,理解為 房屋中介  

2.思路
我們作為客戶端,訪問 代理服務器, ,代理服務器,將資源服務器上的東西,進行返回

3.配置 資源服務器

192.168.11.229  s17dnf.com   

4.配置代理服務器

192.168.11.136 

修改192.168.11.136這臺機器的nginx配置文件,開啟反向代理
配置nginx.conf的server{}如下

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;

        location / {
                #反向代理參數,當我們請求192.168.11.136:80/的時候,進入這裏server,然後location進行資源分配 
                    proxy_pass   http://192.168.11.229;     #就是間接的訪問了 192.168.11.229:80/
                }
        
           } 

nginx負載均衡簡單實現

思路介紹:

nginx.conf>http>定義一個負載均價池

upstream  myserver  {

server   192.168.11.229;

server   192.168.11.xx;  

}

nginx.conf>http>通過反向代理轉發

        server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;



        location / {
        #反向代理參數,當我們請求192.168.11.136:80/的時候,進入這裏server,然後location進行資源分配 
            proxy_pass   myserver;     #就是間接的訪問了 192.168.11.229:80/
        }

   } 

配置nginx負載均衡:

環境準備,三臺服務器

三臺機器都是通過nginx實現的

192.168.11.136  反向代理服務器  

192.168.11.229   資源服務器1    這個機器是返回的dnf頁面 

192.168.11.176   資源服務器2    這個配置的是 index.html  來了老弟

1.配置反向代理服務器 192.168.11.136

修改nginx.conf如下參數

定義負載均衡池

upstream s17server {

server 192.168.11.229;

server 192.168.11.176;

}

        #轉發請求給負載均衡池
        location / {
            proxy_pass   http://s17server;
        }

    

2.此時通過負載均衡器 192.168.11.136,進行訪問測試,默認是輪詢機制

3.upstream分配策略

weight 權重

upstream django {
       server 10.0.0.10:8000 weight=5;
       server 10.0.0.11:9000 weight=10;#這個節點訪問比率是大於8000的
}

ip_hash

每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端服務器
upstream django {
    ip_hash;
       server 10.0.0.10:8000;
       server 10.0.0.11:9000;
}

backup

在非backup機器繁忙或者宕機時,請求backup機器,因此機器默認壓力最小

upstream django {
       server 10.0.0.10:8000 weight=5;
       server 10.0.0.11:9000;
       server node.oldboy.com:8080 backup;
}

Linux - nginx基礎及常用操作