鍍金池/ 教程/ Linux/ Nginx 安裝和配置
Linux 下常用壓縮文件的解壓、壓縮
  • 1.
Maven 安裝和配置
  • 1.
CentOS 網(wǎng)絡(luò)設(shè)置
  • 1.
  • 1.
  • 1.
TeamCity 安裝和配置
Zsh 入門
  • 1.
  • 1.
Bash 其他常用命令
Bash 常用命令
  • 1.
  • 1.
  • 1.
Ubuntu 介紹
Ubuntu 網(wǎng)絡(luò)相關(guān)設(shè)置問(wèn)題
Nginx 安裝和配置
  • 1.
  • 1.
  • 1.
  • 1.
Linux-Tutorial
Nexus 安裝和配置
  • 1.
黑客入侵檢查
Yum 下載安裝包及對(duì)應(yīng)依賴包
  • 1.
  • 1.
Tomcat 8 安裝和配置、優(yōu)化
  • 1.
Ubuntu 安裝和分區(qū)

Nginx 安裝和配置

Nginx 說(shuō)明

來(lái)自網(wǎng)絡(luò)上的一個(gè)好介紹

  • 傳統(tǒng)上基于進(jìn)程或線程模型架構(gòu)的 Web 服務(wù)通過(guò)每進(jìn)程或每線程處理并發(fā)連接請(qǐng)求,這勢(shì)必會(huì)在網(wǎng)絡(luò)和 I/O 操作時(shí)產(chǎn)生阻塞,其另一個(gè)必然結(jié)果則是對(duì)內(nèi)存或 CPU 的利用率低下。生成一個(gè)新的進(jìn)程/線程需要事先備好其運(yùn)行時(shí)環(huán)境,這包括為其分配堆內(nèi)存和棧內(nèi)存,以及為其創(chuàng)建新的執(zhí)行上下文等。這些操作都需要占用 CPU,而且過(guò)多的進(jìn)程/線程還會(huì)帶來(lái)線程抖動(dòng)或頻繁的上下文切換,系統(tǒng)性能也會(huì)由此進(jìn)一步下降。
  • 在設(shè)計(jì)的最初階段,Nginx 的主要著眼點(diǎn)就是其高性能以及對(duì)物理計(jì)算資源的高密度利用,因此其采用了不同的架構(gòu)模型。受啟發(fā)于多種操作系統(tǒng)設(shè)計(jì)中基于“事件”的高級(jí)處理機(jī)制,nginx采用了模塊化、事件驅(qū)動(dòng)、異步、單線程及非阻塞的架構(gòu),并大量采用了多路復(fù)用及事件通知機(jī)制。在 Nginx 中,連接請(qǐng)求由為數(shù)不多的幾個(gè)僅包含一個(gè)線程的進(jìn)程 Worker 以高效的回環(huán)(run-loop)機(jī)制進(jìn)行處理,而每個(gè) Worker 可以并行處理數(shù)千個(gè)的并發(fā)連接及請(qǐng)求。
  • 如果負(fù)載以 CPU 密集型應(yīng)用為主,如 SSL 或壓縮應(yīng)用,則 Worker 數(shù)應(yīng)與 CPU 數(shù)相同;如果負(fù)載以 IO 密集型為主,如響應(yīng)大量?jī)?nèi)容給客戶端,則 Worker 數(shù)應(yīng)該為 CPU 個(gè)數(shù)的 1.5 或 2 倍。
  • Nginx會(huì)按需同時(shí)運(yùn)行多個(gè)進(jìn)程:一個(gè)主進(jìn)程(Master)和幾個(gè)工作進(jìn)程(Worker),配置了緩存時(shí)還會(huì)有緩存加載器進(jìn)程(Cache Loader)和緩存管理器進(jìn)程(Cache Manager)等。所有進(jìn)程均是僅含有一個(gè)線程,并主要通過(guò)“共享內(nèi)存”的機(jī)制實(shí)現(xiàn)進(jìn)程間通信。主進(jìn)程以root用戶身份運(yùn)行,而 Worker、Cache Loader 和 Cache manager 均應(yīng)以非特權(quán)用戶身份運(yùn)行。
  • 主進(jìn)程主要完成如下工作:
  • 1.讀取并驗(yàn)正配置信息;
  • 2.創(chuàng)建、綁定及關(guān)閉套接字;
  • 3.啟動(dòng)、終止及維護(hù)worker進(jìn)程的個(gè)數(shù);
  • 4.無(wú)須中止服務(wù)而重新配置工作特性;
  • 5.控制非中斷式程序升級(jí),啟用新的二進(jìn)制程序并在需要時(shí)回滾至老版本;
  • 6.重新打開(kāi)日志文件,實(shí)現(xiàn)日志滾動(dòng);
  • 7.編譯嵌入式perl腳本;
  • Worker 進(jìn)程主要完成的任務(wù)包括:
  • 1.接收、傳入并處理來(lái)自客戶端的連接;
  • 2.提供反向代理及過(guò)濾功能;
  • 3.nginx任何能完成的其它任務(wù);
  • Cache Loader 進(jìn)程主要完成的任務(wù)包括:
  • 1.檢查緩存存儲(chǔ)中的緩存對(duì)象;
  • 2.使用緩存元數(shù)據(jù)建立內(nèi)存數(shù)據(jù)庫(kù);
  • Cache Manager 進(jìn)程的主要任務(wù):
  • 1.緩存的失效及過(guò)期檢驗(yàn);

Nginx 源碼編譯安裝

  • 官網(wǎng)下載最新穩(wěn)定版本 1.8.1,大?。?14K
  • 官網(wǎng)安裝說(shuō)明:https://www.nginx.com/resources/wiki/start/topics/tutorials/install/
  • 源碼編譯配置參數(shù)說(shuō)明:
  • 開(kāi)始安裝:

    • 安裝依賴包:yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
    • 預(yù)設(shè)幾個(gè)文件夾,方便等下安裝的時(shí)候有些文件可以進(jìn)行存放:
      • mkdir -p /usr/local/nginx /var/log/nginx /var/temp/nginx
    • 下載源碼包:`wget http://nginx.org/download/nginx-1.8.1.tar.gz
    • 解壓:tar zxvf nginx-1.8.1.tar.gz
    • 進(jìn)入解壓后目錄:cd nginx-1.8.1/
    • 編譯配置:

      ./configure \
      --prefix=/usr/local/nginx \
      --pid-path=/var/local/nginx/nginx.pid \
      --lock-path=/var/lock/nginx/nginx.lock \
      --error-log-path=/var/log/nginx/error.log \
      --http-log-path=/var/log/nginx/access.log \
      --with-http_gzip_static_module \
      --http-client-body-temp-path=/var/temp/nginx/client \
      --http-proxy-temp-path=/var/temp/nginx/proxy \
      --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
      --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
      --http-scgi-temp-path=/var/temp/nginx/scgi
    • 編譯:make
    • 安裝:make install
  • 啟動(dòng) Nginx

    • 先檢查是否在 /usr/local 目錄下生成了 Nginx 等相關(guān)文件:cd /usr/local/nginx;ll,正常的效果應(yīng)該是顯示這樣的:

      drwxr-xr-x. 2 root root 4096 3月  22 16:21 conf
      drwxr-xr-x. 2 root root 4096 3月  22 16:21 html
      drwxr-xr-x. 2 root root 4096 3月  22 16:21 sbin
    • 假設(shè)有生成對(duì)應(yīng)的文件,那我們就刪掉剛剛安裝的解壓包:rm -rf /opt/setups/nginx-1.8.1
    • 停止防火墻:service iptables stop
      • 或是把 80 端口加入到的排除列表:
      • sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
      • sudo service iptables save
      • sudo service iptables restart
    • 啟動(dòng):/usr/local/nginx/sbin/nginx,啟動(dòng)完成 shell 是不會(huì)有輸出的
    • 檢查 時(shí)候有 Nginx 進(jìn)程:ps aux | grep nginx,正常是顯示 3 個(gè)結(jié)果出來(lái)
    • 檢查 Nginx 是否啟動(dòng)并監(jiān)聽(tīng)了 80 端口:netstat -ntulp | grep 80
    • 訪問(wèn):192.168.1.114,如果能看到:Welcome to nginx!,即可表示安裝成功
    • 檢查 Nginx 啟用的配置文件是哪個(gè):/usr/local/nginx/sbin/nginx -t
    • 刷新 Nginx 配置后重啟:/usr/local/nginx/sbin/nginx -s reload
    • 停止 Nginx:/usr/local/nginx/sbin/nginx -s stop

Nginx 配置

Nginx 在 1.8.1 版本下的默認(rèn)配置(去掉注釋)

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

HTTP 服務(wù),虛擬主機(jī)

  • 停止防火墻:service iptables stop,防止出現(xiàn)特別干擾
  • 編輯默認(rèn)的配置文件:vim /usr/local/nginx/conf/nginx.conf
  • 設(shè)置兩個(gè)虛擬主機(jī)(通過(guò)端口來(lái)區(qū)分開(kāi))
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    # 一個(gè) server 代表一個(gè)虛擬主機(jī)
    server {
        listen       80;
        server_name  localhost;

        location / {
            # 虛擬機(jī)根目錄是 /usr/local/nginx/html 目錄
            root   html;
            # 虛擬機(jī)首頁(yè)是 /usr/local/nginx/html 目錄下這兩個(gè)文件
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

    server {
        # 第二個(gè)虛擬機(jī)的端口是 90,服務(wù)地址還是本地
        listen       90;
        server_name  localhost;

        location / {
            root   html90;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
  • 設(shè)置兩個(gè)虛擬主機(jī)(通過(guò)域名來(lái)區(qū)分開(kāi))
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    # 一個(gè) server 代表一個(gè)虛擬主機(jī)
    server {
        listen       80;
        # 兩個(gè)虛擬主機(jī)都使用 80 端口,設(shè)置不同域名
        server_name  code.youmeek.com;

        location / {
            # 虛擬機(jī)根目錄是 /usr/local/nginx/html 目錄
            root   html;
            # 虛擬機(jī)首頁(yè)是 /usr/local/nginx/html 目錄下這兩個(gè)文件
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

    server {
        listen       80;
        # 兩個(gè)虛擬主機(jī)都使用 80 端口,設(shè)置不同域名
        server_name  i.youmeek.com;

        location / {
            root   html-i;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

反向代理和負(fù)載均衡

  • 最精簡(jiǎn)的環(huán)境:一臺(tái)虛擬機(jī)

    • 1 個(gè) JDK
    • 1 個(gè) Nginx
    • 2 個(gè) Tomcat
  • Nginx 配置:
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    # 自己定義的兩個(gè) tomcat 請(qǐng)求地址和端口
    # 也就是當(dāng)瀏覽器請(qǐng)求:tomcat.youmeek.com 的時(shí)候從下面這兩個(gè) tomcat 中去找一個(gè)進(jìn)行轉(zhuǎn)發(fā)
    upstream tomcatCluster {
        server 192.168.1.114:8080;
        server 192.168.1.114:8081;

        # 添加 weight 字段可以表示權(quán)重,值越高權(quán)重越大,默認(rèn)值是 1,最大值官網(wǎng)沒(méi)說(shuō),一般如果設(shè)置也就設(shè)置 3,5,7 這樣的數(shù)
        # 官網(wǎng):https://www.nginx.com/resources/admin-guide/load-balancer/#weight
        # server 192.168.1.114:8080 weight=2;
        # server 192.168.1.114:8081 weight=1;
    }

    server {
        listen       80;
        server_name  tomcat.youmeek.com;

        location / {
            proxy_pass   http://tomcatCluster;
            index  index.html index.htm;
        }
    }
}

HTTP 服務(wù),綁定多個(gè)域名

安裝第三方模塊

生成規(guī)格圖

啟用 Gzip 壓縮

防盜鏈

Nginx 禁止特定用戶代理(User Agents)訪問(wèn),靜止指定 IP 訪問(wèn)

Nginx 緩存

Nginx 自動(dòng)分割日志文件

Nginx 處理跨域請(qǐng)求

安全相預(yù)防

在配置文件中設(shè)置自定義緩存以限制緩沖區(qū)溢出攻擊的可能性 client_body_buffer_size 1K; client_header_buffer_size 1k; client_max_body_size 1k; large_client_header_buffers 2 1k;

  1. 將timeout設(shè)低來(lái)防止DOS攻擊 所有這些聲明都可以放到主配置文件中。 client_body_timeout 10; client_header_timeout 10; keepalive_timeout 5 5; send_timeout 10;

  2. 限制用戶連接數(shù)來(lái)預(yù)防DOS攻擊 limit_zone slimits $binary_remote_addr 5m; limit_conn slimits 5;

雜七雜八

資料

上一篇:下一篇: