Nginx是一款輕量級的Web服務器(反向代理服務器)及電子郵件代理服務器。由俄羅斯所開發,供其大型的入口網站及搜索引擎Rambler使用。其特點是內存佔用很少,併發能力很強.Nginx的出現不是很早,但它的發展速度卻是驚人的,嫣然已經成爲世界門戶網站考慮的對象。中國大陸我們比較熟悉的有:新浪、網易、騰訊、小米、淘寶等等。下面是Nginx的世界佔有率排名:
下面我們通過一些小的測試來簡單瞭解一下Nginx的強大。
【準備工作】
①Nginx的官網下載最新的源碼:nginx-1.3.16.tar.gz
②Libeventd官網下載最新源碼:libevent-2.0.18-stable.tar.gz
說明:nginx採用Epoll【事件通知】機制,需要libevent庫的支持,在Red Hat的光盤上是有的,不過版本很低。
③Pcre:一個Perl庫,包括perl兼容的正規表達式庫,也是需要的。
在Red Hat的光盤上是有的,而且默認已經裝過了,但還需要它的一個devel包pcre-devel-6.6-2.e15_1.7(不裝編譯會出錯的).
④Apache:安裝Red Hat光盤自帶(爲了用它帶的壓力測試工具ab)
一:源碼安裝Nginx
①創建Nginx服務的nologin系統賬號
groupadd -r nginx
useradd -r -g nginx -M nginx
② 解壓縮源碼.
tar zxvf nginx-1.3.16.tar.gz -C /usr/local/src/
cd /usr/local/src/nginx-1.3.16
③源碼安裝.
./configure \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/tmp/nginx/client/ \
--http-proxy-temp-path=/var/tmp/nginx/proxy/ \
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
--with-pcre
make && make install
二:Nginx&Apache的壓力測試比較分析
拷貝nginx的主頁文件到apache的主目錄下(用於壓力測試公平性)
cp /usr/local/nginx/html/index.html /var/www/html
啓動Apache服務,進行壓力測試.
service httpd start
停掉Apache服務,啓動Nginx進行壓力測試.
注意:啓動Nginx前要先建一個client訪問時的臨時目錄.
mkdir -pv /var/tmp/nginx/client/
啓動nginx服務.
/usr/local/nginx/sbin/nginx
測試結果顯而易見了。。。。。。。。
三:Nginx的一些基礎應用
【基於ip地址的虛擬主機】(vim /etc/nginx/nginx.conf)
添加兩塊網卡:eth0 192.168.145.100
eth0:0 192.168.145.101
server {
listen 192.168.145.100:80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 192.168.145.101:80;
server_name localhost;
location / {
root /tec;
index index.html index.htm;
}
error_log /var/log/nginx/tec_error.log;
access_log /var/log/nginx/tec_access.log;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
【基於主機頭的虛擬主機】(vim /etc/nginx/nginx.conf)
server {
listen 192.168.145.100:80;
server_name www.wpp.com;
location / {
root html;
index index.html index.htm;
}
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 192.168.145.100:80;
server_name tec.wpp.com;
location / {
root /tec;(這個目錄要自己建立,目錄下放置主頁html文件)
index index.html index.htm;
}
error_log /var/log/nginx/tec_error.log;
access_log /var/log/nginx/tec_access.log;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
【加密訪問】
Step1:建立證書頒發機構CA
①vim /etc/pki/tls/openssl.cnf
②創建CA需要的需要的3個目錄(certs、newcerts、crl)和2個文件(index.txt、serial)
cd /etc/pki/CA/
mkdir certs newcerts crl
touch index.txt serial
echo 01 >serial(給serial一個初始序號)
③生成CA自己的私鑰文件,並修改權限,放到自己的私鑰存放目錄(private/)
④CA給自己頒發證書.(生成證書文件cacert.pem)
Step2:建立Nginx的安全目錄,並生成相關的私鑰和證書文件.
①mkdir -pv /usr/local/nginx/certs
cd /usr/local/nginx/certs
②生成私鑰文件(nginx.key),並修改權限.
chmod 600 nginx.key
③提取剛纔生成的私鑰文件,生成請求證書文件(nginx.csr).
④將請求證書文件提交給證書頒發機構CA,生成證書文件(nginx.crt).
Step3:編輯配置文件,將我們的站點(www.zzdx.com)配置加密訪問.
vim /etc/nginx/nginx.conf(修改完配置文件記得重啓服務)
Step4:加密訪問測試.(爲了方便測試:修改主機的Hosts文件)
Hosts路徑(C:\Windows\System32\drivers\etc\HOSTS)
在瀏覽器的地址欄內輸入 (https://www.zzdx.com),測試.
會提示找不到證書的頒發機構CA,那麼我們該感到奇怪了,我們明明建立了CA了啊,而且也有了CA頒發的證書了啊,那爲什麼會沒有呢?
怎麼解決這個問題呢?
在Apache上把SSL被做成了它的一種模塊,用於調用,而且有證書鏈的感念,所以可以通過證書鏈找到證書頒發機構。但是這些在Nginx上沒有,但還是有解決辦法的,下面就是一種好的解決方法:
既然沒有找到CA的鏈,那我們自己創建一個他們的鏈不就行了!
cd /usr/loacl/nginx/certs/
cp /etc/pki/CA/cacert.pem ./
cat cacert.pem >>nginx.crt(將CA的私鑰文件內容從定向到nginx的後面)
清空瀏覽器的緩存信息,
在瀏覽器的地址欄內輸入 (https://www.zzdx.com),再次測試.
會提示當前證書是由不信任的CA所頒發的,但是也能強制訪問的.
下面來解決一下不信任的問題:
在瀏覽器的證書管理裏面已經可以查詢到我們的CA信息了.
清空一下瀏覽器緩存信息,再次測試,這一次就可以正常訪問了。。。。。。。
是不是很好玩呢?有興趣的朋友也可以自己試一試哦!!!