企業部分之lnmp環境的搭建:Nginx

Nginx是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP服務器。Nginx是由俄羅斯的程序設計師IgorSysoev爲俄羅斯訪問量第二的Rambler.ru站點開發的,第一個公開版本0.1.0發佈於2004104日。其將源代碼以類BSD許可證的形式發佈,因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。

Nginx是一款輕量級的Web服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like協議下發行。其特點是佔有內存少,併發能力強。在高併發連接的情況下,NginxApache服務器不錯的替代品。Nginx同時也可以作爲7層負載均衡服務器來使用。Nginx 0.8.46 + PHP 5.2.14 (FastCGI) 可以承受3萬以上的併發連接數,相當於同等環境下Apache10倍。

Nginx 發佈四年來,Nginx 已經因爲它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名了。目前國內各大門戶網站已經部署了Nginx,如京東、新浪、網易、騰訊、淘寶等;國內幾個重要的視頻分享網站也部署了Nginx,如六房間、酷6等。

 

Nginx工作模式(轉)

Nginx由內核和模塊組成,其中,內核的設計非常微小和簡潔,完成的工作也非常簡單,僅僅通過查找配置文件將客戶端請求映射到一個location blocklocationNginx配置中的一個指令,用於URL匹配),而在這個location中所配置的每個指令將會啓動不同的模塊去完成相應的工作。

Nginx的模塊從結構上分爲核心模塊、基礎模塊和第三方模塊,HTTP模塊、EVENT模塊和MAIL模塊等屬於核心模塊,HTTP Access模塊、HTTP FastCGI模塊、HTTP Proxy模塊和HTTP Rewrite模塊屬於基本模塊,而HTTP Upstream Request Hash模塊、Notice模塊和HTTPAccess Key模塊屬於第三方模塊,用戶根據自己的需要開發的模塊都屬於第三方模塊。正是有了這麼多模塊的支撐,Nginx的功能纔會如此強大。

 

Nginx的模塊從功能上分爲三類,分別是:

Handlers(處理器模塊)。此類模塊直接處理請求,並進行輸出內容和修改headers信息等操作。handlers處理器模塊一般只能有一個。

Filters (過濾器模塊)。此類模塊主要對其他處理器模塊輸出的內容進行修改操作,最後由Nginx 輸出。

Proxies (代理類模塊)。就是Nginx HTTPUpstream 之類的模塊

 

在工作方式上,Nginx分爲單工作進程和多工作進程兩種模式。

在單工作進程模式下,除主進程外,還有一個工作進程,工作進程是單線程的;

在多工作進程模式下,每個工作進程包含多個線程。

Nginx默認爲單工作進程模式。

Nginx的模塊直接被編譯進Nginx,因此屬於靜態編譯方式。啓動Nginx後,Nginx的模塊被自動加載,不像在Apache一樣,首先將模塊編譯爲一個so文件,然後在配置文件中指定是否進行加載。在解析配置文件時,Nginx的每個模塊都有可能去處理某個請求,但是同一個處理請求只能由一個模塊來完成。

如果由FastCGI或其它代理服務器處理單頁中存在的多個SSI,則這項處理可以並行運行,而不需要相互等待。

 

Nginx 通過事件驅動相應多個用戶,使用一個工作線程來響應多個不同的用戶請求

prework 是一個進程響應一個用戶請求

worker是一個線程響應一個用戶請求

 

爲此nginx適合於高併發的場景需求,並且nginx對靜態內容響應較快,但是nginx不支持CGI

在應用是nginx時,nginx主要是工作在web的前端,實現反向代理

1.原碼安裝

獲取nginx壓縮包

[root@server1 ~]# tar zxfnginx-1.10.1.tar.gz

通過修改文件使得安裝的nginx不顯示版本號更加安全。

[root@server1 ~]# ls

anaconda-ks.cfg  install.log install.log.syslog nginx-1.10.1  nginx-1.10.1.tar.gz

[root@server1 ~]# cd nginx-1.10.1/src/core/

[root@server1 core]# vim nginx.h

wKioL1fS8Abg0iNSAAFw5NalWtQ448.png

vim nginx.h

 wKiom1fS8ErCV0bWAAA70qQHqXY889.png-wh_50

如圖做修改。去掉版本號。

./configure --prefix=/usr/local/lnmp/nginx--user=nginx --group=nginx --with-

http_stub_status_module--with-http_ssl_module

 

[[email protected]]# ./configure --prefix=/usr/local/lnmp/nginx--with-http_ssl_module --with-http_stub_status_module

 

 

出現如下圖錯誤提示

wKioL1fS8JazSyULAAAknTiAlNg023.png-wh_50

 [root@server1 nginx-1.10.1]#  yum install pcre-devel -y

出現如下圖錯誤

wKiom1fS8NDhApAdAAA-jO-X_yo673.png-wh_50

[[email protected]]# yum install openssl-devel -y

[[email protected]]# ./configure --prefix=/usr/local/lnmp/nginx--with-http_ssl_module --with-http_stub_status_module

然後 [[email protected]]# make && make install

[[email protected]]# cd /usr/local/lnmp/nginx/sbin/

[root@server1sbin]# ./nginx

[root@server1sbin]# netstat -antlp

wKioL1fS8RGTXi90AABjckII2j8428.png

[root@server1sbin]# curl -I localhost

wKioL1fS8UyCTrEsAACn2Ekm58o742.png

開機自啓動

[root@server1~]# vim /etc/rc.local

wKiom1fS8ZziOGUkAABoIzko5s0304.png

添加軟連接

[root@server1~]# ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin/

網頁測試

wKiom1fS8dqRMgqdAACkpVufuzk606.png

自動監控模塊

location/status {

            stub_status on;

            access_log off;

        }

wKioL1fS8g2Suwy9AAA4IJa-DdU167.png

2加載動態模塊

wKiom1fS8rHiES7AAABC4V3BypQ109.png

wKioL1fS8rLCEwCvAACv_dwQpKo746.png

wKiom1fS8rmDQxAWAAHmLYo3jT0266.png

3修改/usr/local/lnmp/nginx/conf/nginx.conf優化nginx功能

 

[root@server1~]# ps aux

wKioL1fS8vvi5M4kAABs3jb0bis753.png

wKiom1fS8y2TjuHmAAAYgtdlv_w420.png

[root@server1~]# lscpu

wKioL1fS8y7TQTvhAAExhxZH-K4488.png

[root@server1~]# vim /usr/local/lnmp/nginx/conf/nginx.conf

wKiom1fS84WwEAsoAAB8C6uMloM253.png

[root@server1~]# nginx -t

nginx:the configuration file /usr/local/lnmp/nginx/conf/nginx.conf syntax is ok

nginx:configuration file /usr/local/lnmp/nginx/conf/nginx.conf test is successful

[root@server1~]# nginx -s reload

 

[root@server1~]# ulimit

unlimited

[root@server1~]# ulimit -a

wKiom1fS87_zGYQQAAFTN8crhQ4535.png

Shell 炸彈(cpu內存全部佔滿

[root@server1~]# :(){ :|:& };:

如果按下面方法限制用戶使用的進程數量,會避免shell炸彈把內存佔滿而卡死

 

[root@server1~]# vim /etc/security/limits.conf 

wKioL1fS8_KzmkucAABz0rFMgRs633.png

4.製作證書

 server {

        listen       443 ssl;

        server_name server1.example.com;

 

        ssl_certificate      cert.pem;

        ssl_certificate_key  cert.pem;

 

        ssl_session_cache    shared:SSL:1m;

        ssl_session_timeout  5m;

 

        ssl_ciphers  HIGH:!aNULL:!MD5;

        ssl_prefer_server_ciphers  on;

 

        location / {

            root   html;

            index  index.html index.htm;

        }

    }

 

 

 

[root@server1~]# cd /etc/pki/tls/certs/

[root@server1certs]# ls

ca-bundle.crt  ca-bundle.trust.crt  make-dummy-cert  Makefile renew-dummy-cert

[root@server1certs]# make cert.pem

出現如下圖

wKioL1fS9DGA7X8yAAF1DaTRRLo830.png

對應位置寫入相關內容:

CountryName (2 letter code) [XX]:CN

State orProvince Name (full name) []:shanghai

LocalityName (eg, city) [Default City]:shanghai

OrganizationName (eg, company) [Default Company Ltd]:westos

OrganizationalUnit Name (eg, section) []:linux

CommonName (eg, your name or your server's hostname) []:server1.example.com

EmailAddress []:[email protected]

生成證書後

[root@server1certs]# mv cert.pem /usr/local/lnmp/nginx/conf/

 

[root@server1~]# vim /usr/local/lnmp/nginx/conf/nginx.conf

加入網頁重寫

wKiom1fS9HHR1_pWAACoG8sPUQI291.png

[root@server1certs]# nginx -t

[root@server1certs]# nginx -s reload

完成http https之間的轉換。

網頁測試

wKioL1fS9LnhCKofAADOsVBtnXo955.png

wKioL1fS9LqB8NkFAACl0vX_Lcs133.png

網頁重定向

wKiom1fS9QGSdp72AABYU0MxNe0939.png

<body>

<noscript><metahttp-equiv="refresh"content="0;url=http://server2.example.com"></noscript>

<h1>Welcometo nginx!</h1>

這是web網頁的寫法,比網頁重寫快更加優化。

5虛擬主機

 server {

        listen       80;

        server_name www.westos.org;

        location / {

                root /www2;

                index index.html;

        }

    }

 

    server {

        listen       80;

        server_name www.linux.org;

        location / {

            root   /www2;

            index  index.html;

        }

    }

 

6負載均衡

 

wKiom1fS9c-xJjE0AAA3QD6khLY277.png

wKioL1fS9dDCKiGTAAA8-fqfwZw309.png

wKiom1fS9dDjIIPbAAA9EZu8HFA007.png

wKioL1fS9dCAwz-XAABIi5MWd3g958.png


http {

        upstream westos{

                server 172.25.99.2:80;

                server 172.25.99.3:80;

                server 127.0.0.1:80 backup;

        }

 

  server {

        listen       80;

        server_name www.westos.org;

        location / {

                proxy_pass http://westos;

        }

    }

 

    server {

        listen       80;

        server_name www.linux.org;

        location / {

            root   /www2;

            index  index.html;

        }

    }

wKiom1fS9j3R1oZAAABLTorj6Gg469.png

wKioL1fS9j6Dl6LDAAA5HVbnq_M653.png

wKiom1fS9j7Axld9AAGzCor0kE4916.png



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章