nginx簡介


1.Nginx概述

2.Nginx安裝與控制指令

3.Nginx如何工作

4.Nginx配置實例

4.1如何配置Linux下Nginx

4.1.1配置Nginx代理HTTP請求到Tomcat

4.1.2配置Nginx負載均衡代理請求到Tomcat

 

本章linux版本下載

http://pan.baidu.com/s/1bNjmUE

 

1.Nginx概述

Nginx是一個免費的、開源的、高性能的Web服務器和反向代理服務器,以其高性能、穩定性、豐富的功能、配置簡單、資源消耗少著稱。Nginx有別於傳統Web服務器依賴於線程來處理請求,而是基於事件驅動模型,使用更少資源提供更多服務,解決了C10K問題。

 

2.Nginx安裝與控制指令

2.1Windows版Nginx安裝

 如何獲取安裝介質和安裝Nginx

訪問官方網站獲取安裝介質http://nginx.org/download,如下圖

 

下載安裝介質后,解壓到一個不含空格的路徑中即安裝完成,如下圖。

 

啟動及停止Nginx服務

通過Windows命令行進入Nginx解壓目錄,如下圖

執行start nginx.exe,即可以啟動nginx服務,如下圖

執行nginx.exe –s reload:重新加載配置文件。(關閉已經存在的子進程,使用新的配置文件啟動新的子進程。)

n  執行nginx.exe –s quit:停止服務,等待子進程完成現有的請求后關閉。

 

2.2 Linux版Nginx安裝

訪問官方網站獲取安裝介質http://nginx.org/download,如下圖

 

編譯及安裝Nginx

編譯安裝基本步驟:
1.解壓Nginx源碼包。
2.進入Nginx解壓后路徑,執行./configure 定義屬性和模塊。(./configure編譯選項很多,可以使用./configure –help進行查看。--with-xx表示默認沒有安裝,--without-xx表示默認已經選擇安裝,可以根據實際情況定義)。
3.執行make命令進行編譯。
4.執行make install進行安裝。
下面給出一個基於CentOS 6.4的安裝過程實例:
#解決Nginx依賴關系
[root@nginx ~]# yum install zlib zlib-devel   openssl  openssl-devel  pcre   pcre-devel
#解壓Nginx
[root@nginx ~]# tar zxvf nginx-1.7.12.tar.gz
#進入源碼目錄
[root@nginx ~]# cd nginx-1.7.12
#配置選項
[root@nginx ~]# ./configure 
--with-http_ssl_module 
--with-pcre 
--with-http_stub_status_module     
--with-http_realip_module
#執行編譯指令
[root@nginx ~]#make
#執行安裝指令
[root@nginx ~]#make install

 

注意

1.出現

安裝個編譯器

 yum -y install gcc gcc-c++ autoconf automake make  

 

2.沒有prce包的話

yum -y install pcre-devel

 

3.沒有zlib包的話

yum install -y zlib-devel

 

啟動及停止Nginx服務

#啟動Nginx
[root@nginx nginx-1.7.12]# /usr/local/nginx/sbin/nginx
#重新加載配置文件。(關閉已經存在的子進程,使用新的配置文件啟動新的子進程。)
[root@nginx nginx-1.7.12]# /usr/local/nginx/sbin/nginx -s reload
#停止服務,等待子進程完成現有的請求后關閉。
[root@nginx nginx-1.7.12]# /usr/local/nginx/sbin/nginx -s quit

本機測試下載:

 

 

3.Nginx如何的工作

上一章介紹了如何在Windows和Linux操作系統上安裝Nginx,以及如何啟動、停止、重啟Nginx服務。這里我們簡單介紹Nginx如何工作,包含Nginx的目錄結構、進程如何工作、Nginx如何處理一個請求等

 

3.1 Nginx目錄結構

Windows版Nginx目錄結構

進入Nginx安裝目錄,可以查看Nginx的目錄,下圖展示了Windows下Nginx的目錄結構。

 

如上圖所示,Windows版Nginx安裝完成后,會在安裝目錄生成6個目錄和一個可執行文件:conf目錄、contrib目錄、docs目錄、html目錄、logs目錄、temp目錄和nginx的可執行文件。
1.conf目錄:存放配置文件的目錄,包含主配置文件nginx.conf,是我們經常修改的配置文件。
2.contrib目錄:存放開源愛好者共享的代碼。
3.docs目錄:存放文檔資料。
4.html目錄:默認存放了Nginx的錯誤頁面和歡迎頁面。
5.logs目錄:默認存放了訪問日志、錯誤日志和Nginx主進程pid文件。
6.temp目錄:臨時目錄,用於存放Nginx運行時產生的臨時文件。
7.nginx.exe:可執行程序,常用於Nginx服務的啟動、停止等管理工作。

 

Linux版Nginx目錄結構

進入Nginx安裝目錄,可以查看Nginx的目錄,下圖展示了Linux下Nginx的目錄結構。

如上圖所示,Linux版Nginx安裝完成后,會在安裝目錄生成9個目錄:client_body_temp目錄、conf目錄、fastcgi_temp目錄、html目錄、logs目錄、proxy_temp目錄、sbin目錄、scgi_temp目錄和uwsgi_temp目錄。
1.*_temp目錄:共有5個temp結尾的目錄,用於存放Nginx運行時產生的臨時文件。
2.conf目錄:存放配置文件的目錄,包含主配置文件nginx.conf,是我們經常修改的配置文件。
3.html目錄:默認存放了Nginx的錯誤頁面和歡迎頁面等。
4.logs目錄:默認存放了訪問日志和錯誤日志文件。
5.sbin目錄:默認存放了Nginx的二進制命令,常用於Nginx服務的啟動、停止等管理工作。

 

3.2  Nginx進程如何工作

默認情況下,運行中的Nginx會包含如下進程:

主進程master process(父進程)。

子進程worker process(工作進程)。

具體情況如下圖所示。

 

Nginx主進程

       Nginx主進程充當監控進程,而由主進程生成的子進程則充當工作進程。主進程充當整個進程組與管理用戶的交互接口,同時對進程進行監護。它不需要處理網絡事件,不負責業務執行,只會通過管理worker進程來實現重啟服務、關閉服務、配置文件生效等功能。

Nginx子進程

       Nginx子進程充當工作進程,負責完成具體的任務。子進程主要負責完成用戶請求接收與返回用戶數據,以及與后端應用服務器的數據交互等工作。

 Nginx如何處理一個請求

       Nginx收到到一個請求后,它會依據如下步驟處理:

       首先,根據http請求的“Host”頭以決定由哪個虛擬機處理請求;然后,匹配請求的URI,並根據URI定義規則返回數據。

 

4.如何配置Linux下Nginx

 

4.1.1配置Nginx代理HTTP請求到Tomcat

1.准備好tomcat1

 

2.修改

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}

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;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;

    server {
        listen       80;
        server_name  localhost;
        
 location / { proxy_pass http://127.0.0.1:8080/test/; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
    }
}

 

當訪問時候發現跳轉到tomcat那里

 

4.1.2配置Nginx負載均衡代理請求到Tomcat

1.准備,在同一服務器啟動兩個tomcat,不同端口

本文已經tomcat7為例

修改tomcat1的server.xml如下

<?xml version='1.0' encoding='utf-8'?>

<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <!-- Security listener. Documentation at /docs/config/listeners.html
  <Listener className="org.apache.catalina.security.SecurityListener" />
  -->
  <!--APR library loader. Documentation at /docs/apr.html -->
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
  <Listener className="org.apache.catalina.core.JasperListener" />
  <!-- Prevent memory leaks due to use of particular java/javax APIs-->
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

  <!-- Global JNDI resources
       Documentation at /docs/jndi-resources-howto.html
  -->
  <GlobalNamingResources>

    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>


  <Service name="Catalina">


    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

    <Engine name="Catalina" defaultHost="localhost">

      <Realm className="org.apache.catalina.realm.LockOutRealm">

        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>
    </Engine>
  </Service>
</Server>

 

修改tomcat2的server.xml如下

<?xml version='1.0' encoding='utf-8'?>

<Server port="8006" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <!-- Security listener. Documentation at /docs/config/listeners.html
  <Listener className="org.apache.catalina.security.SecurityListener" />
  -->
  <!--APR library loader. Documentation at /docs/apr.html -->
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
  <Listener className="org.apache.catalina.core.JasperListener" />
  <!-- Prevent memory leaks due to use of particular java/javax APIs-->
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

  <!-- Global JNDI resources
       Documentation at /docs/jndi-resources-howto.html
  -->
  <GlobalNamingResources>

    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>

  <Service name="Catalina">

    <Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

    <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />


    <Engine name="Catalina" defaultHost="localhost">

      <Realm className="org.apache.catalina.realm.LockOutRealm">

        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>
    </Engine>
  </Service>
</Server>

 

仔細觀看有3個地方不一樣

<Server port="8005" shutdown="SHUTDOWN">

<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
 

啟動后發現

 

2.修改nginx.conf配置

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


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;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    
 upstream test { server 127.0.0.1:8080 weight=1 max_fails=3 fail_timeout=5s; server 127.0.0.1:8081 weight=1 max_fails=3 fail_timeout=5s; }
        
    server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        
    location / {
    proxy_pass http://test/test/;
    proxy_set_header Host  $http_host;
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

}

 

解釋

upstream test {
    #定義一個負載均衡,后面可以使用proxy調用。
    server 127.0.0.1:8080 weight=1 max_fails=3 fail_timeout=5s;
      server 127.0.0.1:8081 weight=1 max_fails=3 fail_timeout=5s;
#定義負載均衡的web后端服務器,負載均衡策略默認是輪詢,max_fails最大失敗次數3,weight定義權值
#fail_timeout統計失敗嘗試次數,在5s內嘗試失敗3次,則認為不可用。將該服務器標記不可用
     }

#定義代理到后端tomcat的examples應用    
    proxy_pass http://test/test;

 

 

 

重新加載

 

訪問試試

再訪問

 

成功

 

 

 

 include功能:

 

第一種方法:文件夾

打開nginx.conf在最后一行大括號前加上

 

 

 

 

 

 成功

 

2.第二種方法

 或者

 

 

 成功


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM