ningx

nginx和apache區別

 

Nginxphp

  1. 輕量級,採用 C 進行編寫,一樣的 web 服務,會佔用更少的內存及資源
  2. 抗併發,nginx 以 epoll and kqueue 做爲開發模型,處理請求是異步非阻塞的,負載能力比 apache 高不少,而 apache 則是阻塞型的。在高併發下 nginx 能保持低資源低消耗高性能 ,而 apache 在 PHP 處理慢或者前端壓力很大的狀況下,很容易出現進程數飆升,從而拒絕服務的現象。
  3. nginx 處理靜態文件好,靜態處理性能比 apache 高三倍以上
  4. nginx 的設計高度模塊化,編寫模塊相對簡單
  5. nginx 配置簡潔,正則配置讓不少事情變得簡單,並且改完配置能使用 -t 測試配置有沒有問題,apache 配置複雜 ,重啓的時候發現配置出錯了,會很崩潰
  6. nginx 做爲負載均衡服務器,支持 7 層負載均衡
  7. nginx 自己就是一個反向代理服務器,並且能夠做爲很是優秀的郵件代理服務器
  8. 啓動特別容易, 而且幾乎能夠作到 7*24 不間斷運行,即便運行數個月也不須要從新啓動,還可以不間斷服務的狀況下進行軟件版本的升級
  9. 社區活躍,各類高性能模塊出品迅速

Apache

  1. apache 的 rewrite 比 nginx 強大,在 rewrite 頻繁的狀況下,用 apache
  2. apache 發展到如今,模塊超多,基本想到的均可以找到
  3. apache 更爲成熟,少 bug ,nginx 的 bug 相對較多
  4. apache 超穩定
  5. apache 對 PHP 支持比較簡單,nginx 須要配合其餘後端用
  6. apache 在處理動態請求有優點,nginx 在這方面是雞肋,通常動態請求要 apache 去作,nginx 適合靜態和反向。

apache 仍然是目前的主流,擁有豐富的特性,成熟的技術和開發社區html

 

總結

二者最核心的區別在於 apache 是同步多進程模型,一個鏈接對應一個進程,而 nginx 是異步的,多個鏈接(萬級別)能夠對應一個進程前端

通常來講,須要性能的 web 服務,用 nginx 。若是不須要性能只求穩定,更考慮 apache ,後者的各類功能模塊實現得比前者,例如 ssl 的模塊就比前者好,可配置項多。epoll(freebsd 上是 kqueue ) 網絡 IO 模型是 nginx 處理性能高的根本理由,但並非全部的狀況下都是 epoll 大獲全勝的,若是自己提供靜態服務的就只有寥寥幾個文件,apache 的 select 模型或許比 epoll 更高性能。固然,這只是根據網絡 IO 模型的原理做的一個假設,真正的應用仍是須要實測了再說的。mysql

更爲通用的方案是,前端 nginx 抗併發,後端 apache 集羣,配合起來會更好。nginx

集羣

 

簡單來講,集羣就是指一組相互獨立的計算機,利用高速通訊網絡組成的一個較大的計算機服務系統,每一個集羣節點都是運行各自服務的獨立服務器。這些服務器之間能夠彼此通訊,協同向用戶提供應用程序、系統資源和數據,並以單一系統的模式加以管理。當用戶客戶機請求集羣系統時,集羣給用戶的感受就是一個單一的服務器,而實際上用戶請求的是一組集羣服務器。web

集羣主要包括幾大特色:高性能、價格有效性、可伸縮性、高可用性、透明性、可管理性和可編程性。sql

 

負載均衡集羣

 

常見的負載均衡的架構包括有負載均衡集羣、高可用性集羣、高性能計算集羣等等。這裏着重介紹負載均衡集羣,其餘的集羣方式不作介紹。數據庫

負載均衡集羣爲企業提供了更爲實用、性價比更高的系統架構解決方案。負載集羣能夠把不少客戶集中的訪問請求負載壓力盡量平均分攤到計算機集羣中處理。客戶訪問請求負載均衡一般包含應用程序處理負載均衡和網絡流量負載。這樣的系統很是適合使用同一組應用程序爲大量用戶提供服務的模式,每一個節點均可以承當必定的訪問請求負載壓力,而且能夠實現訪問請求在各節點之間動態分配,以實現負載均衡。apache

負載均衡集羣運行時,通常是經過一個或多個前端負載均衡器將客戶訪問請求分發到後端的一組服務器上,從而達到整個系統的高性能和高可用性。通常高可用性集羣和負載均衡集羣使用相似的技術,或同事具備高可用與負載均衡的特色。負載均衡的做用爲:分擔用戶訪問及數據流量、保持業務的連續性、應用於Web業務及數據庫從庫等服務器的業務。編程

 

Nginx負載均衡集羣介紹

 

互聯網企業中常見的開源集羣軟件有:Nginx、LVS、Haproxy、Keepalived等,硬件有F五、Netscaler等。

嚴格地說,Nginx僅僅是做爲Nginx Proxy反向代理使用的,由於反向代理功能表現的效果是負載均衡集羣的效果,因此也叫作Nginx負載均衡。反向代理和負載均衡的區別在於負載均衡一般都是對請求的數據包的轉發(也有可能會改寫數據包)、傳遞,其中DR模式明顯的特徵就是從負載均衡下面的節點服務器來看,接收到的請求仍是來自負載均衡器的客戶端的真實用戶。而反向代理,反向代理接收訪問用戶的請求後,會代理用戶從新發起請求代理下的節點服務器,最後把數據返回給客戶端用戶。在節點服務器來看,訪問節點服務器的客戶端用戶是反向代理服務器,而不是真實的網站訪問用戶。

Nginx負載均衡的模塊主要有兩個,ngx_http_proxy_module,ngx_http_upstream_module。編譯的時候須要把這兩個模塊編譯進去。

nginx部署

關閉防火牆能夠經過方形80端口

iptables -l INPUT -p tcp -d 192.168.23.137 -j ACCEPT

配置網絡源

[local]

 name=local

enabled=1

gpgcheck=0

baseurl=file:///mnt

[epel]

name=epel

enabled=1

gpgcheck=0

baseurl=https://mirrors.aliyun.com/epel/7Server/x86_64/

下載ngnix並啓動

yum install nginx -y

systemctl restart nginx

瀏覽器訪問

 

nginx反向代理-動靜分離

反向代理:在收到客戶端請求以後,會修改目標IP地址和端口

正向代理:在收到客戶端請求以後,會修改源IP地址和端口

上游服務器:代理服務器後端的那些真正給客戶端提供服務的節點,這樣的服務器稱之爲上游服務器

下游服務器:客戶端就是下游節點

定義:

192.168.23.120 主服務器

192.168.23.121 靜態節點

192.168.23.122 動態節點

主服務器部署nginx並配置動靜分離規則

vim /etc/nginx/nginx.conf

location ~ html$ {

proxy_pass http://192.168.23.121;

}

location ~ php$ {

proxy_pass http://192.168.23.122;

}

檢測並重啓nginx

nginx -t

systemctl restart nginx

配置靜態服務器

例如:

           echo "11111" >> /var/www/html/index.html

配置動態服務器

yum install php httpd -y

vim /var/www/html/index.php

<?php

phpinfo();

?>

瀏覽器訪問

nginx反向代理–不徹底代理

 

第一步:編輯nginx文件,編輯規則

location /admin{
proxy_pass http://192.168.64.5;
}

 

第二步:檢測並重啓

[root@ken html]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@ken html]# systemctl restart nginx

 

第三步:瀏覽器訪問

訪問不到

 

第四步:客戶端建立文件

[root@ken html]# mkdir admin
[root@ken html]# echo 「56566」 > admin/index.html

 

第五步:瀏覽器再次訪問

訪問成功

 

總結:不徹底代理的話location後面定義的訪問uri會自動填補到IP地址的後面,location /admin{
proxy_pass http://192.168.64.5;
}

好比上面這個規則,意思就是http://192.168.64.5/admin

nginx反向代理–徹底代理

 

第一步:編輯nginx文件,編輯規則

location /admin{
proxy_pass http://192.168.64.5/;
}

 

第二步:檢測並重啓

[root@ken html]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@ken html]# systemctl restart nginx

 

第三步:瀏覽器訪問

能夠訪問

 

總結:徹底代理的話location後面定義的訪問uri不會自動填補到IP地址的後面,location /admin{
proxy_pass http://192.168.64.5/;
}

好比上面這個規則,意思就是直接http://192.168.64.5

 

 

Location匹配規則

 

語法規則: 【= | ^~ | ~ | ~* | / | /uri 】

location = /uri                 = 表示精確匹配,只有徹底匹配上才能生效,若找到,中止搜索;

location ^~ /uri               ^~開頭表示對URL路徑進行前綴匹配(一般是個目錄),而且在正則匹配以前,若找到,中止搜索;

location ~ pattern           ~開頭表示區分大小寫的正則匹配,按配置文件順序匹配;

location ~* pattern          ~*開頭表示不區分大小寫的正則匹配,按配置文件順序匹配;

location /uri                    不帶任何修飾符,表示前綴匹配,在正則匹配以後;

location /                        通用匹配,任何未匹配到其餘location的請求都會匹配到,至關於default;

多個location配置的狀況匹配順序爲

  • 首先精確匹配 = ;
  • 其次前綴匹配 ^~;
  • 其次是按照配置文件中的正則匹配;
  • 而後匹配不帶任何修飾符的前綴匹配;
  • 最後交給/通用匹配;

nginx實現負載均衡

 

調度器:分發用戶的請求到一個後端節點

上游服務器(真實服務器):每一個真正用來處理用戶請求的節點都是一個上游服務器

CIP:客戶端的IP地址

RIP:真實服務器的IP地址

VIP:虛擬IP,用戶所看到的是也是虛擬IP

配置nginx文件(不要在server下配置)

upstream song{

server 192.168.23.121 weight=6 max_fails=2 fail_timeout=2;

server 192.168.23.122 weight=6 max_fails=2 fail_timeout=2;

}

......

location / {

procy_pass http://song

}

檢測並重啓

nginx -t

systemctl restart nginx

訪問瀏覽器

LNMP架構上線網站

 

第一步:下載相關的軟件包

[root@ken html]# yum install nginx php php-mysql mariadb-server php-fpm -y

 

第二步:編輯php匹配規則

server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /var/www/html;
index index.php index.html;

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
location ~ php$ {
fastcgi_pass 127.0.0.1:9000;
include fastcgi.conf;
}

第三步:檢測並重啓

[root@ken html]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@ken html]# systemctl restart nginx

第四步:啓動php-fpm

[centos]
name=centos base
enabled=1
gpgcheck=0
baseurl=http://mirrors.163.com/centos/7/os/x86_64/

[root@ken yum.repos.d]# systemctl restart php-fpm

第五步:重啓數據庫

[root@ken yum.repos.d]# systemctl restart mariadb

第六步:建立數據庫添加用戶

MariaDB [(none)]> create database ken;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> grant all on ken.* to ken@’localhost’ identified by ‘123’;
Query OK, 0 rows affected (0.00 sec)

第七步:上傳wordpress安裝包至nginx網站根目錄下/usr/share/nginx/html 並解壓

[root@ken html]# yum install unzip -y

[root@ken html]# unzip wordpress-3.3.1-zh_CN.zip

第八步:配置數據庫文件

[root@ken html]# cp wp-config-sample.php wp-config.php
[root@ken html]# vim wp-config.php

define(‘DB_NAME’, ‘ken’);

/** MySQL 數據庫用戶名 */
define(‘DB_USER’, ‘ken’);

/** MySQL 數據庫密碼 */
define(‘DB_PASSWORD’, ‘123’);

第九步:瀏覽器訪問

相關文章
相關標籤/搜索