Nginx+Apache環境的安裝與配置

咱們依然儘量採用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壓縮

後話,本文旨在介紹這種結構的搭建方法,因此用到的配置參數比較少,關於更詳細的參數設置和優化,須要讀者你本身根據實際狀況結合官方幫助文檔進一步去測試。

 

轉自:https://www.server110.com/nginx/201404/8817.html

相關文章
相關標籤/搜索