天天看點

Nginx基礎應用--------基于CentOS6源碼安裝

1. 背景  

      介紹:

    Nginx是一款高性能的HTTP和反向代理伺服器,能夠選擇高效的epoll(linux2.6核心)、kqueue(freebsd)、eventport(solaris10)作為網絡I/O模型,能夠支援高達50000個并發連接配接數的響應,而記憶體、CPU等系統資源消耗卻非常低、運作非常穩定。

   選擇的理由:

   * 支援高并發連接配接:nginx使用高效的多路複用模型(epoll/linux, kqueue/freebsd, eventport/solaris)

   * 記憶體消耗少:在伺服器3W并發連接配接下,開啟10個Nginx程序消耗150MB記憶體(15MB*10)

   * 成本低廉:購買F5 BIG-IP、NetScaler等負載均衡交換機需要幾十萬RMB,而開源Nginx替代這些商業裝置。

   * 其他理由:網絡配置簡單;支援rewrite重寫規則,能夠根據域名、URL的不同、将HTTP請求分到不同的後端伺服器群組;内置的健康檢查功能;節省帶寬,支援GZIP壓縮,可以添加浏覽器本地緩存的Header頭;支援熱部署,能夠在不間斷服務的情況下、對軟體版本進行更新

   應用範圍:

   * Web服務:    設定多虛拟主機的服務并配合fast-cgi或tomcat支援動态網頁

       Nginx是近年來比較火的一個www服務的軟體,與Apache和lighttpd以及tomcat等功能類似,但是nginx要比前者有着卓越的性能,比如:采用了epoll模型,記憶體消耗小等優點;

   *  反向代理, 多虛拟主機的代理:

       指以代理伺服器來接受Internet上的連接配接請求,然後将請求轉發給内部網絡上的伺服器,并将從伺服器上得到的結果傳回給Internet上請求連接配接的用戶端;

   * 七層的負載均衡: 單多虛拟主機不同伺服器之間的通路;

      負載均衡是由多台伺服器以對稱的方式組成一個伺服器集合,每台都是等價地位,通過某種負載分擔技術,将外部發送來的請求均勻配置設定到對稱結構中某一台伺服器上,來接收到請求的伺服器獨立地回應客戶的請求;

    * 正向代理:  代理上網

       代理内部網絡對Internet的連結請求,客戶機必須指定代理伺服器,并将本來要直接發送到web伺服器上的http請求發送到代理伺服器中,由代理伺服器請求并傳回響應内容;

    * 緩存服務

       為proxy和fastcgi做緩存服務,提高通路速度,相當于squid功能;

2. 環境

<code>[root@nginx ~]</code><code># cat /etc/redhat-release </code>

<code>CentOS release 6.8 (Final)</code>

<code>[root@nginx ~]</code><code># uname -r</code>

<code>2.6.32-504.el6.x86_64</code>

3. 安裝

   * 臨時關閉selinux(可選)

<code>[root@nginx ~]</code><code># setenforce 0</code>

   * 關閉iptables(可選)

<code>[root@nginx ~]</code><code># service iptables stop</code>

   * 建立www使用者

<code>[root@nginx ~]</code><code># useradd -r -s /sbin/nologin -M www</code>

   * 安裝pcre庫依賴

<code>[root@nginx ~]</code><code># yum install pcre pcre-devel -y</code>

   * 安裝ssl庫依賴

<code>[root@nginx ~]</code><code># yum install openssl openssl-devel -y</code>

   * 進入下載下傳目錄

<code>cd</code> <code>/usr/local/src</code>

   * 下載下傳nginx源碼包

<code>wget http:</code><code>//nginx</code><code>.org</code><code>/download/nginx-1</code><code>.11.10.</code><code>tar</code><code>.gz</code>

   * 解壓nginx源碼包

<code>tar</code> <code>zxvf nginx-1.11.10.</code><code>tar</code><code>.gz</code>

   * 進入nginx包目錄

<code>cd</code> <code>nginx-1.11.10</code>

   * 指定安裝目錄、使用者、子產品

<code>[root@nginx ~]</code><code># ./configure --prefix=/usr/local/nginx-1.11.10 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module</code>

   * 編譯并安裝

<code>[root@nginx ~]</code><code># make &amp;&amp; make install</code>

   * 做nginx軟連結

<code>[root@nginx ~]</code><code># ln -s /usr/local/nginx-1.11.10 /usr/local/nginx</code>

4. 建立啟動腳本 

   * /etc/init.d/nginx

<code>#!/bin/sh</code>

<code>#</code>

<code># nginx - this script starts and stops the nginx daemon</code>

<code># chkconfig:   - 85 15</code>

<code># description:  NGINX is an HTTP(S) server, HTTP(S) reverse \</code>

<code>#               proxy and IMAP/POP3 proxy server</code>

<code># processname: nginx</code>

<code># config:      /usr/local/nginx/conf/nginx.conf</code>

<code># config:      /etc/sysconfig/nginx</code>

<code># pidfile:     /var/run/nginx.pid</code>

<code># Source function library.</code>

<code>. </code><code>/etc/rc</code><code>.d</code><code>/init</code><code>.d</code><code>/functions</code>

<code># Source networking configuration.</code>

<code>. </code><code>/etc/sysconfig/network</code>

<code># Check that networking is up.</code>

<code>[ </code><code>"$NETWORKING"</code> <code>= </code><code>"no"</code> <code>] &amp;&amp; </code><code>exit</code> <code>0</code>

<code>nginx=</code><code>"/usr/local/nginx/sbin/nginx"</code>

<code>prog=$(</code><code>basename</code> <code>$nginx)</code>

<code>NGINX_CONF_FILE=</code><code>"/usr/local/nginx/conf/nginx.conf"</code>

<code>[ -f </code><code>/etc/sysconfig/nginx</code> <code>] &amp;&amp; . </code><code>/etc/sysconfig/nginx</code>

<code>lockfile=</code><code>/var/lock/subsys/nginx</code>

<code>make_dirs() {</code>

<code>   </code><code># make required directories</code>

<code>   </code><code>user=`$nginx -V 2&gt;&amp;1 | </code><code>grep</code> <code>"configure arguments:"</code> <code>| </code><code>sed</code> <code>'s/[^*]*--user=\([^ ]*\).*/\1/g'</code> <code>-`</code>

<code>   </code><code>if</code> <code>[ -z </code><code>"`grep $user /etc/passwd`"</code> <code>]; </code><code>then</code>

<code>       </code><code>useradd</code> <code>-M -s </code><code>/bin/nologin</code> <code>$user</code>

<code>   </code><code>fi</code>

<code>   </code><code>options=`$nginx -V 2&gt;&amp;1 | </code><code>grep</code> <code>'configure arguments:'</code><code>`</code>

<code>   </code><code>for</code> <code>opt </code><code>in</code> <code>$options; </code><code>do</code>

<code>       </code><code>if</code> <code>[ `</code><code>echo</code> <code>$opt | </code><code>grep</code> <code>'.*-temp-path'</code><code>` ]; </code><code>then</code>

<code>           </code><code>value=`</code><code>echo</code> <code>$opt | </code><code>cut</code> <code>-d </code><code>"="</code> <code>-f 2`</code>

<code>           </code><code>if</code> <code>[ ! -d </code><code>"$value"</code> <code>]; </code><code>then</code>

<code>               </code><code># echo "creating" $value</code>

<code>               </code><code>mkdir</code> <code>-p $value &amp;&amp; </code><code>chown</code> <code>-R $user $value</code>

<code>           </code><code>fi</code>

<code>       </code><code>fi</code>

<code>   </code><code>done</code>

<code>}</code>

<code>start() {</code>

<code>    </code><code>[ -x $nginx ] || </code><code>exit</code> <code>5    [ -f $NGINX_CONF_FILE ] || </code><code>exit</code> <code>6</code>

<code>    </code><code>make_dirs    </code><code>echo</code> <code>-n $</code><code>"Starting $prog: "</code>

<code>    </code><code>daemon $nginx -c $NGINX_CONF_FILE</code>

<code>    </code><code>retval=$?</code>

<code>    </code><code>echo</code>

<code>    </code><code>[ $retval -</code><code>eq</code> <code>0 ] &amp;&amp; </code><code>touch</code> <code>$lockfile</code>

<code>    </code><code>return</code> <code>$retval</code>

<code>stop() {</code>

<code>    </code><code>echo</code> <code>-n $</code><code>"Stopping $prog: "</code>

<code>    </code><code>killproc $prog -QUIT    retval=$?</code>

<code>    </code><code>[ $retval -</code><code>eq</code> <code>0 ] &amp;&amp; </code><code>rm</code> <code>-f $lockfile</code>

<code>restart() {</code>

<code>    </code><code>configtest || </code><code>return</code> <code>$?</code>

<code>    </code><code>stop</code>

<code>    </code><code>sleep</code> <code>1</code>

<code>    </code><code>start</code>

<code>reload() {</code>

<code>    </code><code>echo</code> <code>-n $</code><code>"Reloading $prog: "</code>

<code>    </code><code>killproc $nginx -HUP    RETVAL=$?</code>

<code>force_reload() {</code>

<code>    </code><code>restart</code>

<code>configtest() {</code>

<code>    </code><code>$nginx -t -c $NGINX_CONF_FILE</code>

<code>rh_status() {</code>

<code>    </code><code>status $prog</code>

<code>rh_status_q() {</code>

<code>    </code><code>rh_status &gt;</code><code>/dev/null</code> <code>2&gt;&amp;1</code>

<code>case</code> <code>"$1"</code> <code>in</code>

<code>    </code><code>start)</code>

<code>        </code><code>rh_status_q &amp;&amp; </code><code>exit</code> <code>0</code>

<code>        </code><code>$1</code>

<code>        </code><code>;;</code>

<code>    </code><code>stop)</code>

<code>        </code><code>rh_status_q || </code><code>exit</code> <code>0</code>

<code>    </code><code>restart|configtest)</code>

<code>    </code><code>reload)</code>

<code>        </code><code>rh_status_q || </code><code>exit</code> <code>7</code>

<code>    </code><code>force-reload)</code>

<code>        </code><code>force_reload</code>

<code>    </code><code>status)</code>

<code>        </code><code>rh_status     </code>

<code>    </code><code>condrestart|try-restart)</code>

<code>        </code><code>rh_status_q || </code><code>exit</code> <code>0            </code>

<code>    </code><code>*)</code>

<code>        </code><code>echo</code> <code>$</code><code>"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"</code>

<code>        </code><code>exit</code> <code>2</code>

<code>esac</code>

   * 改變nginx腳本檔案權限

<code>[root@nginx ~]</code><code># chmod 755 /etc/init.d/nginx</code>

   * 添加進service管理服務并設定開機啟動

<code>[root@nginx ~]</code><code># chkconfig --add nginx</code>

<code>[root@nginx ~]</code><code># chkconfig nginx on</code>

5. 服務啟動測試

<code>[root@nginx ~]</code><code>#  service nginx start</code>

可以看到80預設的80端口nginx已經開始監聽

6. 通路測試

   * 通過浏覽器測試, 此nginx主控端ip為192.168.222.128

<a href="https://s3.51cto.com/wyfs02/M00/8E/CB/wKioL1jLZlbwzh8RAAAplQqofmk312.png" target="_blank"></a>

通路成功,nginx已經成功傳回頁面

7. 總結

以需求驅動技術,技術本身沒有優略之分,隻有業務之分。

      本文轉自asd1123509133 51CTO部落格,原文連結:http://blog.51cto.com/lisea/1907590,如需轉載請自行聯系原作者

繼續閱讀