咱們依然儘量採用yum來安裝咱們須要的軟件,由系統官方維護的軟件,其安全性和穩定性都值得信賴,而且容易管理,升級方便,可是在CentOS和RHEL的官方yum源中暫時沒有Nginx等軟件包,因此咱們須要使用EPEL的yum源。EPEL是什麼,EPEL的yum源怎麼添加,點擊這裏查看。javascript
本文將要介紹的Nginx+Apache結構,其實就是Nginx作前端,Apache作後端,充分發揮他們各自的優點之處。Nginx對於高併發性能出衆,Proxy功能強效率高,佔用系統資源少,而Apache在高併發時對隊列的處理比FastCGI(Nginx須要經過fastcgi等方式運行php)更好,而且在處理動態php頁面時,mod_php也比php-cgi更穩定更高效。php
也就是說,咱們的目的是,由Nginx來接收客戶端的請求,若是是動態頁面請求,就交給Apache處理,而後經由Nginx再返回給客戶端,其他的請求,則由Nginx本身處理,而後把結果返回給客戶端,。固然了,你徹底可讓Nginx只作Proxy功能,全部的請求都交給Apache,Tomcat等處理,本文使用前者。css
可是,在本文中,咱們實現的是在一臺服務器裏一個Nginx加一個Apache的簡單結構,在實際應用中,可能前端是由一臺或多臺Nginx組成的代理服務器,後端則是多臺Apache或其餘Web服務器,再加上多種第三方軟件而組成的集羣。html
前提約定:假設咱們系統默認主站點名是www.server110.com,網站根目錄是/var/www/server110前端
第一步,安裝並配置Nginx,安裝完以後,配置文件都在/etc/nginx目錄下,主設置文件/etc/nginx/nginx.conf:java
[root@test ~]# yum -y install nginx
[root@test ~]# vi /etc/nginx/nginx.conf
user nginx;
worker_processes 2;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
use epoll;
worker_connections 2048;
}
http {
include /etc/nginx/mime.types;
include /etc/nginx/proxy.conf;
include /etc/nginx/gzip.conf;
default_type application/octet-stream;
index index.html index.htm index.php;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
sendfile on;
tcp_nopush on;
server_tokens off;
keepalive_timeout 60;
server_names_hash_bucket_size 128;
server {
listen 80;
server_name www.server110.com;
root /var/www/server110;
location ~* .*.(gif|jpg|jpeg|png|bmp|ico|css|js|txt|flv|swf|mid|doc|ppt|xls|pdf|txt|mp3|wma)$ {
expires 2d;
}
# 若是你須要客戶端緩存的內容以及媒體,圖片等文件固定放置一些目錄下的話,就把上面那個
# location註釋掉,用下面這種方式
# location ~ ^/(images|javascript|js|css|flash|media|static)/ {
# expires 2d;
#}
location ~ .*.(php?|cgi|pl|py)$ {
proxy_pass http://127.0.0.1:8888;
}
location ~ /.ht {
deny all;
}
location ~ /.+.(inc|conf|cnf) {
deny all;
}
access_log /var/log/nginx/server110-access.log main;
#access_log off
}
# Load config files from the /etc/nginx/conf.d directory
include /etc/nginx/conf.d/*.conf;
}
[root@test ~]# vi /etc/nginx/proxy.conf
proxy_redirect off;
proxy_hide_header Vary;
proxy_set_header Accept-Encoding '';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 32 4k;
proxy_busy_buffers_size 64k;
[root@test ~]# vi /etc/nginx/gzip.conf
gzip on;
gzip_http_version 1.0;
gzip_disable "MSIE [1-6].";
gzip_disable "Mozilla/4";
gzip_comp_level 3;
gzip_proxied any;
gzip_vary on;
gzip_buffers 4 16k;
gzip_min_length 1100;
gzip_types text/plain text/xml text/css application/xml application/xhtml+xml application/rss+xml application/atom_xml application/javascript application/x-javascript;mysql
爲了讓nginx.conf簡潔,我把一些相關的共通設定放到同一個專門的文件裏,而後在主配置文件nginx.conf里加載。若是你使用了VirtualHost運營多個站點,你能夠根據不一樣站點的需求而配置不一樣的設定文件,而後分別在各自的server域里加載。 linux
第二步,安裝並配置Apache,配置文件在/etc/httpd/下,咱們修改主配置文件/etc/httpd/conf/httpd.conf,配置文件太長,我只寫我須要改的地方: nginx
[root@test ~]# yum -y install httpd
[root@test ~]# vi /etc/httpd/conf/httpd.conf
Listen 80
↓改爲
Listen 127.0.0.1:8888
DocumentRoot "var/www/html"
↓改爲
DocumentRoot "/var/www/server110"
<Directory "/var/www/html">
↓改爲
<Directory "/var/www/server110">
Options Indexes FollowSymLinks
↓改爲以下,容許CGI,SSI
Options Includes ExecCGI FollowSymLinks
AllowOverride None
↓改爲以下,支持.htaccess
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ServerSignature On
↓改爲以下,在現實錯誤頁面的時候不會顯示服務器和apache的版本
ServerSignature Off
#AddHandler cgi-script .cgi
↓改爲以下,cgi腳本使用.cgi,.pl,.py
AddHandler cgi-script .cgi .pl .pyweb
第三步,設置VirtualHost(若是你須要在本機上運營多個站點,不然略過此步):
1.修改/etc/httpd/conf/httpd.conf:
#NameVirtualHost *:80
↓改爲以下
NameVirtualHost 127.0.0.1:8888
#追加下面4行,www.server110.com是咱們的默認主站
<VirtualHost 127.0.0.1:8888>
ServerName www.server110.com
</VirtualHost>
Include virtual/*.conf
2.修改/etc/nginx/nginx.conf,在server{}域的後面追加以下一句:
include /etc/nginx/virtual/*.conf;
3.假設咱們還要在本機上運行一個站點叫www.cooliter.com:
[root@test ~]# mkdir /etc/nginx/virtual/
[root@test ~]# mkdir /etc/httpd/virtual/
[root@test ~]# vi /etc/nginx/virtual/www.cooliter.com.conf
server {
listen 80;
server_name www.cooliter.com;
root /var/www/cooliter;
location ~* .*.(gif|jpg|jpeg|png|bmp|ico|css|js|txt|flv|swf|mid|doc|ppt|xls|pdf|txt|mp3|wma)$ {
expires 24h;
}
location ~ .*.(php?|cgi|pl|py)$ {
proxy_pass http://127.0.0.1:8888;
}
location ~ /.ht {
deny all;
}
location ~ /.+.(inc|conf|cnf) {
deny all;
}
access_log /var/log/nginx/cooliter-access.log main;
#access_log off
}
[root@test ~]# vi /etc/httpd/virtual/www.cooliter.com.conf
<VirtualHost 127.0.0.1:8888>
ServerAdmin webmaster@cooliter.com
DocumentRoot /var/www/cooliter
ServerName www.cooliter.com
UseCanonicalName Off
ErrorLog logs/www.cooliter.com-error_log
CustomLog logs/www.cooliter.com-access_log common
</VirtualHost>
第四步,安裝MySql,參照這篇教程。
第五步,安裝php及其餘經常使用組件:
[root@test ~]# yum -y install php php-mysql php-gd php-xml php-mbstring php-mcrypt
第六步,安裝php加速器eaccelerator和php-pecl-memcached模塊,提升性能:
[root@test ~]# yum install php-eaccelerator php-pecl-memcached
設定文件分別是/etc/php.d/eaccelerator.ini和/etc/php.d/memcached.ini,若是你採用默認設置,就不須要修改設定文件了。
第七步,安裝並配置Zend提供的php加速、解密軟件,yum源裏沒有,直接從官方下載便可,不須要編譯,下載的時候注意根據你的系統選擇32位或者64位的版本。
1:若是你用的php是php5.3.x版本,須要安裝的是Zend Guard Loader:
[root@test ~]# tar -xzvf ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz
[root@test ~]# ls ZendGuardLoader-php-5.3-linux-glibc23-i386/
README.txt php-5.3.x
#小提示,看解壓目錄下的README.txt裏有使用說明
[root@test ~]# mv -T ZendGuardLoader-php-5.3-linux-glibc23-i386 /usr/lib/php/ZendGuardLoader-php-5.3
[root@test ~]# vi /etc/php.d/zend.ini
#添加以下內容,保存退出
[Zend Guard Loader]
zend_extension="/usr/lib/php/ZendGuardLoader-php-5.3/php-5.3.x/ZendGuardLoader.so"
zend_loader.enable=1
zend_loader.disable_licensing=0
zend_loader.obfuscation_level_support=3
2:若是你用的php是php5.2或更早的版本,須要安裝的是Zend Optimizer:
[root@test ~]# tar -xzvf ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz
[root@test ~]# ls ZendOptimizer-3.3.9-linux-glibc23-i386
EULA-ZendOptimizer Inventory.xml LICENSE README-ZendOptimizer data md5
#小提示1,看解壓目錄下的README-ZendOptimizer裏有使用說明
[root@test ~]# ls ZendOptimizer-3.3.9-linux-glibc23-i386/data
4_2_0_comp 4_3_x_comp 5_0_x_comp 5_2_x_comp
4_2_x_comp 4_4_x_comp 5_1_x_comp poweredbyoptimizer.gif
#小提示2,解壓目錄下的data目錄下根據不一樣的php版本提供了不一樣的so文件,假設咱們的版本是php5.1.x的
[root@test ~]# mv -T ZendOptimizer-3.3.9-linux-glibc23-i386 /usr/lib/php/ZendOptimizer-3.3.9
[root@test ~]# vi /etc/php.d/zend.ini
#添加以下內容,保存退出
[Zend Optimizer]
zend_optimizer.optimization_level=1
zend_extension = "/usr/lib/php/ZendOptimizer-3.3.9/data/5_1_x_comp/ZendOptimizer.so"
第八步,啓動Apache和Nginx,並測試(MySql就不測試了):
[root@test ~]# /etc/init.d/httpd start
[root@test ~]# /etc/init.d/nginx start
[root@test ~]# chkconfig httpd on
[root@test ~]# chkconfig nginx on
[root@test ~]# mkdir /var/www/server110
[root@test ~]# echo "hello,server110" > /var/www/server110/index.html
[root@test ~]# echo -e "<?phpnphpinfo();" > /var/www/server110/index.php
打開瀏覽器分別訪問一下index.html和index.php,而後關閉Apache,再分別訪問一下(php頁面應該就訪問不了了)。
測試gzip是否有效,由於咱們設置了gzip_min_length爲1100,因此低於1100bytes的頁面不會壓縮,你測試的頁面內容最好大於1100bytes。
[root@test ~]# curl -I -H "Accept-Encoding:gzip,deflate" http://www.cooliter.com/test.txt
HTTP/1.1 200 OK
Server: nginx
Date: Fri, 22 Jul 2011 04:45:30 GMT
Content-Type: text/plain
Last-Modified: Fri, 22 Jul 2011 04:40:30 GMT
Connection: keep-alive
Vary: Accept-Encoding
Expires: Sun, 24 Jul 2011 04:45:30 GMT
Cache-Control: max-age=172800
Content-Encoding: gzip <---證實服務器支持gzip壓縮
後話,本文旨在介紹這種結構的搭建方法,因此用到的配置參數比較少,關於更詳細的參數設置和優化,須要讀者你本身根據實際狀況結合官方幫助文檔進一步去測試。