Nginxphp
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、LVS、Haproxy、Keepalived等,硬件有F五、Netscaler等。
嚴格地說,Nginx僅僅是做爲Nginx Proxy反向代理使用的,由於反向代理功能表現的效果是負載均衡集羣的效果,因此也叫作Nginx負載均衡。反向代理和負載均衡的區別在於負載均衡一般都是對請求的數據包的轉發(也有可能會改寫數據包)、傳遞,其中DR模式明顯的特徵就是從負載均衡下面的節點服務器來看,接收到的請求仍是來自負載均衡器的客戶端的真實用戶。而反向代理,反向代理接收訪問用戶的請求後,會代理用戶從新發起請求代理下的節點服務器,最後把數據返回給客戶端用戶。在節點服務器來看,訪問節點服務器的客戶端用戶是反向代理服務器,而不是真實的網站訪問用戶。
Nginx負載均衡的模塊主要有兩個,ngx_http_proxy_module,ngx_http_upstream_module。編譯的時候須要把這兩個模塊編譯進去。
關閉防火牆能夠經過方形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
瀏覽器訪問
反向代理:在收到客戶端請求以後,會修改目標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文件,編輯規則
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文件,編輯規則
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
語法規則: 【= | ^~ | ~ | ~* | / | /uri 】
location = /uri = 表示精確匹配,只有徹底匹配上才能生效,若找到,中止搜索;
location ^~ /uri ^~開頭表示對URL路徑進行前綴匹配(一般是個目錄),而且在正則匹配以前,若找到,中止搜索;
location ~ pattern ~開頭表示區分大小寫的正則匹配,按配置文件順序匹配;
location ~* pattern ~*開頭表示不區分大小寫的正則匹配,按配置文件順序匹配;
location /uri 不帶任何修飾符,表示前綴匹配,在正則匹配以後;
location / 通用匹配,任何未匹配到其餘location的請求都會匹配到,至關於default;
多個location配置的狀況匹配順序爲
調度器:分發用戶的請求到一個後端節點
上游服務器(真實服務器):每一個真正用來處理用戶請求的節點都是一個上游服務器
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
訪問瀏覽器
第一步:下載相關的軟件包
[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’);
第九步:瀏覽器訪問