Nginx ("engine x") 是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP服務器。Nginx是由Igor Sysoev爲俄羅斯訪問量第二的Rambler.ru站點開發的,第一個公開版本0.1.0發佈於2004年10月4日。其將源代碼以類BSD許可證的形式發佈,因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。2011年6月1日,nginx 1.0.4發佈。
Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。由俄羅斯的程序設計師Igor Sysoev所開發,供俄國大型的入口網站及搜索引擎Rambler(俄文:Рамблер)使用。其特點是佔有內存少,併發能力強,事實上nginx的併發能力確實在同類型的網頁服務器中表現較好。
##以上來源百度百科
環境:
服務器:centos 6.8
客戶端:windows 10 14393
大綱:
1、下載nginx源碼包
2、編譯安裝源碼包
3、認識目錄結構
4、配置虛擬主機
5、實現域名重定向
6、總結
1、=下載nginx源碼包==========
nginx版本號nginx1.10.3
wget http://nginx.org/download/nginx-1.10.3.tar.gz
##下載nginx源碼包
tar zxvf nginx-1.10.3.tar.gz
##解壓源碼包
cd nginx-1.10.3/
##進入目錄
2、=編譯安裝源碼包===========
提示:由於nginx編譯時核心組件基本都已經安裝了,所以我們只需要接入幾個擴展模塊就好了
useradd -M -s /sbin/nologin nginx
##創建nginx用戶
yum install pcre-devel.x86_64 -y
##安裝pcre的devel
yum install openssl-devel.x86_64 -y
##安裝openssl的devel
./configure --prefix=/application/nginx1.10.3 --with-http_stub_status_module --with-http_ssl_module --user=nginx --group=nginx
#prefix是nginx的安裝路徑
#stub_status狀態模塊,如果不加,後面要開啓這個模塊就需要重新編譯但是不用安裝。
#ssl模塊
#user指定用戶
#指定組
##編譯安裝比如以上的依賴包,如果是編譯安裝的一定要在編譯的時候指定它的絕對路徑否則會報錯
echo $?
##查看是否有錯誤,0表示一切正常
make
##
echo $?
##檢查
make install
##安裝
echo $?
##檢查
ln -s /application/nginx1.10.3/ /application/nginx
##優化鏈接,驅版本號
3、=認識目錄結構==========
cd /application/nginx
##進入目錄
├── conf##配置文件
│ ├── fastcgi.conf
│ ├── fastcgi.conf.default
│ ├── fastcgi_params
│ ├── fastcgi_params.default
│ ├── koi-utf
│ ├── koi-win
│ ├── mime.types
│ ├── mime.types.default
│ ├── nginx.conf##主配置文件
│ ├── nginx.conf.default ##默認主配置文件
│ ├── scgi_params
│ ├── scgi_params.default
│ ├── uwsgi_params
│ ├── uwsgi_params.default
│ └── win-utf
├── html##默認站點
│ ├── 50x.html
│ └── index.html
├── logs##日誌文件
└── sbin##命令目錄
└── nginx##nginx -h可以查看幫助
##提示:nginx的目錄結構和操作相比較apache個人感覺是要簡單點的。
4、=配置虛擬主機===============
!!/提示:如果已經比較數量apache的虛擬主機,那麼nginx的虛擬主機也差不多主要表現形式有以下三種:
基於端口的虛擬主機 ##這個比基於IP的用的要多點
基於IP的虛擬主機 ##這個平時學習也基本不太用
基於域名的虛擬主機 ##這個用的最多了,等等也是用這個來搭建虛擬主機
apache的虛擬主機是在extra擴展配置目錄中的httpd-vhosts.conf文件配置,而且這個配置文件要和httpd.conf主配置文件前後呼應才行增加了操作步驟,nginx的則不需要所有操作都在主配置文件中。
在配置虛擬主機之前先來認識下配置文件
/!!
egrep -v "#|^$" conf/nginx.conf.default > conf/nginx.conf
##將主配置文件化複雜爲簡單,方便學習,egrep也可以是grep -e(擴展的正則表達式)-v是除了什麼之外的,^$標示空行,後面就是重定向覆蓋了,因爲nginx默認就有一個備份的配置文件,所以我們就不用動手了。
vim conf/nginx.conf
worker_processes 1;
##最大的工作進程數,一般和CPU的核心數對應
events {
worker_connections 1024;
##我的給人理解是併發數
}
http {
include mime.types;
##設定mine類型,類型由mime.type文件定義
default_type application/octet-stream;
##默認文件類型
sendfile on;
##nginx調用sendfile函數來輸出文件,對於普通應用必須爲on。如果用來進行下載磁盤IO重負載應用##可以已設置爲off
keepalive_timeout 65;
##長鏈接超時時間,單位秒
server {
##server標籤
listen 80;
##監聽端口
server_name localhost;
##域名
location / {
root html;
##站點目錄,apache是DocumentRoot,默認站點是htdocs
index index.html index.htm;
##默認識別的網站主頁文件,如果不存在直接報錯403
}
error_page 500 502 503 504 /50x.html;
##當訪問時錯誤的話就跳轉到默認站點下的50x.html頁面
location = /50x.html {
root html;
}
}
}
./sbin/nginx
##啓動nginx
lsof -i :80
##查看80端口
curl localhost
##本地測試訪問,如果沒有錯誤說說明nginx啓動成功
!!前面的鋪墊已經做好了,下面就進入正題開始配置虛擬主機,基於
a)複製一個server標籤,並且複製的server標籤一定要在http的標籤內
b)更改server_name對應的域名,實現不同域名的訪問
c)更改站點路徑,並且建立相應的index.html文件,否則會報錯一般是403
d)修改測試的客戶機的hosts文件
vim conf/nginx.conf
##將配置文件修改爲如下
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 www.virtualperson.org;
location / {
root html/www;
index index.html index.htm;
}
}
server {
listen 80;
server_name blog.virtualperson.org;
location / {
root html/blog;
index index.html index.htm;
}
}
server {
listen 80;
server_name net.virtualperson.org;
location / {
root html/net;
index index.html index.htm;
}
}
}
./sbin/nginx -s reload
##平滑重啓nginx服務
cd html/
##進入默認站點目錄
for name in net www blog;do mkdir $name;echo "$name.virtualperson.org" > ./$name/index.html;done
##使用for循環創建相應的站點目錄和主頁文件
tree ./
##查看下目錄結構
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
##防火牆開啓80端口
一下操作在windows10上,也就是客戶端:
修改windows10的hosts文件:
win+R-->system32-->drivers-->etc--> hosts添加如下記錄
192.168.199.221 net.virtualperson.org blog.virtualperson.org www.virtualperson.org
測試是否能正常解析IP
ping blog.virtualperson.org
ping net.virtualperson.org
使用瀏覽器輸入對應域名顯示對應的域名說明測試成功
5、=實現域名重定向===================
爲什麼要域名重定向:
a)比如一家公司有多個域名,可以把多餘域名都指向一臺nginx服務器,nginx收到這個域名會把它轉成對應的域名。
b)比如我們在某個域名提供商哪裏購買了域名,然而我們自己並沒有服務器,就可以把我們的域名指向某個有流量比較大的IP,地址,然後把把域名發不出去,可以利用這個方法給我們的域名刷流量。所以我們就需要在nginx服務器做域名重定向,因爲在nginx服務器不識別的域名訪問服務器,等同於IP直接訪問,收到以IP的形式直接訪問,我們可以選擇拒絕,也可以設置爲跳轉到我們正真的域名上去。
##說的不是很清除,語文一直不是很好,請原諒。
pwd
/application/nginx/conf
##查看當前的工作路徑
實例一多域名訪問同一服務器:
vim nginx.conf
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 otherdomainname.org;
rewrite ^/(.*) http://net.virtualperson.org/$1 permanent;
}
server {
listen 80;
server_name www.virtualperson.org;
location / {
root html/www;
index index.html index.htm;
}
}
server {
listen 80;
server_name blog.virtualperson.org;
location / {
root html/blog;
index index.html index.htm;
}
}
server {
listen 80;
server_name net.virtualperson.org;
location / {
root html/net;
index index.html index.htm;
}
}
}
../sbin/nginx -s reload
##重啓nginx服務
在windows端測試,別忘了修改hosts文件
訪問後將會會根據我們的設定跳轉到net.virtualperson.org
##提示:重定向的server標籤一定要在最前面,否則沒有效果。
實例二拒絕IP直接訪問:
前面說了只要是服務器未知的域名都是以IP的形式直接訪問本機,所以我們可以拒絕IP的直接訪問,配置如下:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server{
listen 80;
return 500;
}
server {
listen 80;
server_name otherdomainname.org;
rewrite ^/(.*) http://net.virtualperson.org/$1 permanent;
}
server {
listen 80;
server_name www.virtualperson.org;
location / {
root html/www;
index index.html index.htm;
}
}
server {
listen 80;
server_name blog.virtualperson.org;
location / {
root html/blog;
index index.html index.htm;
}
}
server {
listen 80;
server_name net.virtualperson.org;
location / {
root html/net;
index index.html index.htm;
}
}
}
附加:
!!以下內容,爲附加內容,可以瞭解下
vim nginx.conf
..................
server {
listen 80;
server_name net.virtualperson.org;
location / {
root html/net;
index index.html index.htm;
}
}
server {
listen 80;
server_name status.virtualperson.org;
stub_status on;
access_log off;
}
}
../sbin/nginx -s reload
##重啓nginx服務
通過windows10瀏覽器訪問域名:status.virtualperson.org得到如下結果:
Active connections: 2 ##當前的活動連接,正在處理的活動連接數 server accepts handled requests ##server表示nginx啓動到現在一共處理了多少個成功的鏈接 ##accepts表示nginx一共處理了的握手次數 ##握手次數-處理的連接=錯誤連接(請求丟失次數) ##hangled表示共處理了多少次請求 48 48 27 Reading: 0 Writing: 1 Waiting: 1 ##reading讀取到客戶端的header信息數 ##返回給客戶端的header信息 ##waiting已經處理完成正在等待下一次請求指令的駐留鏈接,開啓keep-alive的情況,這個值等與action-(reading+writeing)
日誌管理:nginx的日誌分割操作我用的最多的就是利用crond和mv命令來實現的,這個簡單也不需要在安裝其他的工具。
6、=總結=====================
a)搭建Nginx前最好先去搭建下apache,畢竟經典啊,而且有關網站統計,Apache使用的還是挺多的,而且熟悉Apache也爲更好的學習Nginx奠定了基礎。
b)瞭解Apache和Nginx的區別和優缺點,可以讓你能更更加方便的選擇對應的服務。
c)Nginx的配置相對簡單,而且目錄結構簡單,容易上手,Nginx佔用資源小,高併發。
d)採用了比較新的epoll模型,而apache採用的是select模型。
e)Nginx支持反向代理,提高訪問速度
註釋:本人是新手,寫的博客和排版都有一定的大問題,請諒解,我會努力改進的。