A. nginx與apache哪個更小
nginx更小
輕量級,同樣起web 服務,比apache 佔用更少的內存及資源
抗並發,nginx 處理請求是非同步非阻塞的,而apache 則是阻塞型的,在高並發下nginx 能保持低資源低消耗高性能
高度模塊化的設計,編寫模塊相對簡單
社區活躍,各種高性能模塊出品迅速啊
apache 相對於nginx 的優點:
rewrite ,比nginx 的rewrite 強大
模塊超多,基本想到的都可以找到
少bug ,nginx 的bug 相對較多
超穩定
存在就是理由,一般來說,需要性能的web 服務,用nginx 。如果不需要性能只求穩定,那就apache 吧。後者的各種功能模塊實現得比前者,例如ssl 的模塊就比前者好,可配置項多。這里要注意一點,epoll(freebsd 上是 kqueue )網路IO 模型是nginx 處理性能高的根本理由,但並不是所有的情況下都是epoll 大獲全勝的,如果本身提供靜態服務的就只有寥寥幾個文件,apache 的select 模型或許比epoll 更高性能。當然,這只是根據網路IO 模型的原理作的一個假設,真正的應用還是需要實測了再說的。
2、作為 Web 伺服器:相比 Apache,Nginx 使用更少的資源,支持更多的並發連接,體現更高的效率,這點使 Nginx 尤其受到虛擬主機提供商的歡迎。在高連接並發的情況下,Nginx是Apache伺服器不錯的替代品: Nginx在美國是做虛擬主機生意的老闆們經常選擇的軟體平台之一. 能夠支持高達 50,000 個並發連接數的響應, 感謝Nginx為我們選擇了 epoll and kqueue 作為開發模型.
Nginx作為負載均衡伺服器: Nginx 既可以在內部直接支持 Rails 和 PHP 程序對外進行服務, 也可以支持作為 HTTP代理 伺服器對外進行服務. Nginx採用C進行編寫, 不論是系統資源開銷還是CPU使用效率都比 Perlbal 要好很多.
作為郵件代理伺服器: Nginx 同時也是一個非常優秀的郵件代理伺服器(最早開發這個產品的目的之一也是作為郵件代理伺服器), Last.fm 描述了成功並且美妙的使用經驗.
Nginx 是一個安裝非常的簡單 , 配置文件非常簡潔(還能夠支持perl語法), Bugs 非常少的伺服器: Nginx 啟動特別容易, 並且幾乎可以做到7*24不間斷運行,即使運行數個月也不需要重新啟動. 你還能夠不間斷服務的情況下進行軟體版本的升級 .
3、Nginx 配置簡潔, Apache 復雜
Nginx 靜態處理性能比 Apache 高 3倍以上
Apache 對 PHP 支持比較簡單,Nginx 需要配合其他後端用
Apache 的組件比 Nginx 多
現在 Nginx 才是燃攔正 Web 伺服器的首選
4、最核心的區別在於apache是同步多進程模型,一皮悔個連接對應一個進程;nginx是非同步的,多個連接(萬級別)可以對應一個進程
5、nginx處理靜態文件好,耗費內存少.但無疑apache仍然是目前的主流,有很多豐富的特性.所以還需要搭配著來.當然如果能確定nginx就適合需求,那麼使用nginx會是更經濟的方式.
6、從個人過往的使用情況來看,nginx的負載能力比apache高很多。最新的伺服器也改用nginx了。而且nginx改完配置能-t測試一下配置有沒有問題,apache重啟的時候發現配置出錯了,會很崩潰,改的時候都會非常小心翼翼現在看有好多集群站,前端nginx抗並發,後端apache集群,配合的也不錯。
7、nginx處理動態請求是雞肋,一般動態請求要apache去做,nginx只適合靜態和反向。
8、從我個人的經驗來看,nginx是很不錯的前端伺服器,負載性能很好,在老奔上開nginx,用webbench模擬10000個靜態文件請求毫不吃力。apache對php等語言的支持很好,此外apache有強大的支持網路,發展時間相對nginx更久,bug少但是apache有先天不支持多核心處理負載雞肋的缺點,建議使用nginx做前端,後端用apache。大型衡鍵網站建議用nginx自代的集群功能
9、Nginx優於apache的主要兩點:1.Nginx本身就是一個反向代理伺服器 2.Nginx支持7層負載均衡;其他的當然,Nginx可能會比apache支持更高的並發,但是根據NetCraft的統計,2011年4月的統計數據,Apache依然佔有62.71%,而Nginx是7.35%,因此總得來說,Aapche依然是大部分公司的首先,因為其成熟的技術和開發社區已經也是非常不錯的性能。
10、你對web server的需求決定你的選擇。大部分情況下nginx都優於APACHE,比如說靜態文件處理、PHP-CGI的支持、反向代理功能、前端Cache、維持連接等等。在Apache+PHP(prefork)模式下,如果PHP處理慢或者前端壓力很大的情況下,很容易出現Apache進程數飆升,從而拒絕服務的現象。
11、可以看一下nginx lua模塊:https://github.com/chaoslaw...apache比nginx多的模塊,可直接用lua實現apache是最流行的,why?大多數人懶得更新到nginx或者學新事物
12、對於nginx,我喜歡它配置文件寫的很簡潔,正則配置讓很多事情變得簡單運行效率高,佔用資源少,代理功能強大,很適合做前端響應伺服器
13、Apache在處理動態有優勢,Nginx並發性比較好,CPU內存佔用低,如果rewrite頻繁,那還是Apache吧
家用蒸箱烤箱
精選推薦
廣告
nginx和linux的區別,下 - Nginx和Nginx+的比較_伺服器應用_Linux公社-Linux系統門戶網站...
1164閱讀·0評論·1點贊
2021年5月16日
Nginx與Apache的區別
2456閱讀·0評論·0點贊
2022年6月19日
Apache與Nginx的優缺點比較
506閱讀·0評論·0點贊
2012年6月26日
Apache和Nginx的區別
4509閱讀·0評論·1點贊
2021年10月24日
Nginx的windows和Linux版本介紹and 正反向代理!
1445閱讀·0評論·0點贊
2020年6月1日
Nginx 和 Apache 區別最全詳解?
928閱讀·0評論·1點贊
2022年1月5日
買銅閥門選皇冠_產品全 質量好 性價比高,品質有保證。
皇冠實業
廣告
nginx和apache的區別
1.7W閱讀·2評論·13點贊
2020年10月27日
nginx和apache的區別,選擇哪個好?
6035閱讀·0評論·6點贊
2022年2月6日
Linux下Apache與httpd的區別與關系
9711閱讀·0評論·1點贊
2014年6月19日
Web server調研分析
135閱讀·0評論·0點贊
2011年10月10日
apache和nginx的區別
65閱讀·0評論·0點贊
2019年12月24日
Apache和Nginx有什麼區別(轉載)
455閱讀·0評論·1點贊
2020年1月17日
Apache和Nginx 比較
2420閱讀·0評論·1點贊
2022年3月22日
Linux&Nginx簡單總結
472閱讀·0評論·0點贊
2020年10月8日
Nginx和Apache的區別(優缺點分析及架構剖析)
887閱讀·0評論·3點贊
2019年11月20日
Apache和Nginx的優缺點
165閱讀·0評論·0點贊
2022年6月5日
nginx和apache優缺點
1492閱讀·0評論·2點贊
2019年7月2日
去首頁
看看更多熱門內容
B. nginx和apache的區別
作者:fiisio
鏈接:http://www.hu.com/question/19571087/answer/58671320
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。
1、nginx相對於apache的優點:
輕量級,同樣起web 服務,比apache佔用更少的內存及資源抗並發,nginx 處理請求是非同步非阻塞的,而apache 則是阻塞型的,在高並發下nginx 能保持低資源低消耗高性能高度模塊化的設計,編寫模塊相對簡單社區活躍,各種高性能模塊出品迅速啊
apache 相對於nginx 的優點:
rewrite ,比nginx 的rewrite 強大,動態頁面,模塊超多,基本想到的都可以找到,少bug ,nginx 的bug 相對較多,超穩定
存在就是理由,一般來說,需要性能的web 服務,用nginx 。如果不需要性能只求穩定,那就咐瞎apache 吧。後者的各種功能模塊實現得比前者,例如ssl 的模塊就比前者好,可配置項多。這里要注意一點,epoll(freebsd 上是 kqueue )網路IO 模型是nginx 處理性能高的根本理由,但並不是所有的情況下都是epoll 大獲全勝的,如果本身提供靜態服務的就只有寥寥幾個文件,apache 的select 模型或許比epoll 更高性能。
2、作為 Web 伺服器:相比 Apache,Nginx 使用更少的資源,支持更多的並發連接,體現更高的效率,這點使 Nginx 尤其受到虛擬主機提供商的歡迎。在高連接並發的情況下,Nginx是Apache伺服器不錯的替代品: Nginx在美國是做虛擬主機生意的老闆們經常選擇的軟體平台之一. 能夠支持高達 50,000 個並發連接數的響應, 感謝Nginx為我們選擇了 epoll and kqueue 作為開發模型.
Nginx作為負載均衡伺服器: Nginx 既可以在內部直接支持 Rails 和 PHP 程序對外進行服務, 也可以支持作為 HTTP代理 伺服器對外進行服務. Nginx採用C進行編寫, 不論是系統資源開銷還是CPU使用效率都比 Perlbal 要好很多.
作為郵件代理伺服器: Nginx 同時也是一個非常優秀的郵件代理伺服器(最早開發這個產品的目的之一也是作為郵件代理伺服器), Last.fm 描述了成功並且美妙的使用經驗.
Nginx 是一個安裝非常的簡單 , 配置文件非常簡潔(還能夠支持perl語法), Bugs 非常少的伺服器: Nginx 啟動特別容易, 並且幾乎可以做到7*24不間斷運行,即使運行數個月也不需要重新啟動. 你還能夠不間斷服務的情況下進行軟體版本的升級 .
3、Nginx 配置簡潔, Apache 復雜判頌
Nginx 靜態處理性能比 Apache 高 3倍以上
Apache 對 PHP 支持比較簡單,Nginx 需要配合其他後端用
Apache 的組件比 Nginx 多
現在 Nginx 才是 Web 伺服器的首選
4、最核心的區別在於apache是同步多進程模型,一個連接對應一個進程;nginx是非同步的,多個連接(萬級別)衡沖空可以對應一個進程
5、nginx處理靜態文件好,耗費內存少.但無疑apache仍然是目前的主流,有很多豐富的特性.所以還需要搭配著來.當然如果能確定nginx就適合需求,那麼使用nginx會是更經濟的方式.
apache有先天不支持多核心處理負載雞肋的缺點,建議使用nginx做前端,後端用apache。大型網站建議用nginx自代的集群功能
6、nginx的負載能力比apache高很多。最新的伺服器也改用nginx了。而且nginx改完配置能-t測試一下配置有沒有問題,apache重啟的時候發現配置出錯了,會很崩潰,改的時候都會非常小心翼翼現在看有好多集群站,前端nginx抗並發,後端apache集群,配合的也不錯。
7、nginx處理動態請求是雞肋,一般動態請求要apache去做,nginx只適合靜態和反向。
8、nginx是很不錯的前端伺服器,負載性能很好,在老奔上運行nginx,用webbench模擬10000個靜態文件請求毫不吃力。apache對php等語言的支持很好,此外apache有強大的支持網路,發展時間相對nginx更久,
9、Nginx優於apache的主要兩點:1.Nginx本身就是一個反向代理伺服器 2.Nginx支持7層負載均衡;其他的當然,Nginx可能會比apache支持更高的並發,但是根據NetCraft的統計,2011年4月的統計數據,Apache依然佔有62.71%,而Nginx是7.35%,因此總得來說,Aapche依然是大部分公司的首先,因為其成熟的技術和開發社區已經也是非常不錯的性能。
10、你對web server的需求決定你的選擇。大部分情況下nginx都優於APACHE,比如說靜態文件處理、PHP-CGI的支持、反向代理功能、前端Cache、維持連接等等。在Apache+PHP(prefork)模式下,如果PHP處理慢或者前端壓力很大的情況下,很容易出現Apache進程數飆升,從而拒絕服務的現象。
11、可以看一下nginx lua模塊:https://github.com/chaoslaw...apache比nginx多的模塊,可直接用lua實現apache是最流行的,why?大多數人懶得更新到nginx或者學新事物
12、對於nginx,我喜歡它配置文件寫的很簡潔,正則配置讓很多事情變得簡單運行效率高,佔用資源少,代理功能強大,很適合做前端響應伺服器
13、Apache在處理動態有優勢,Nginx並發性比較好,CPU內存佔用低,如果rewrite頻繁,那還是Apache吧
C. 怎樣實現前端nginx後端apache
1、nginx相對於apache的優點:
輕量級,同樣起web 服務,比apache佔用更少的內存及資源
抗並發,nginx 處理請求是非同步非阻塞的,而apache 則是阻塞型的,在高並發下nginx 能保持低資源低消耗高性能
高度模塊化的設計,編寫模塊相對簡單
社區活躍,各種高性能模塊出品迅速啊
apache 相對於nginx 的優點:
rewrite ,比nginx 的rewrite 強大
動態頁面
模塊超多,基本想到的都可以找到
少bug ,nginx 的bug 相對較多
超穩定
存在就是理由,一般來說,需要性能的web 服務,用nginx 。如果不需要性能只求穩定,那就apache 吧。
後者的各種功能模塊實現得比前者,例如ssl 的模塊就比前者好,可配置項多。這里要注意一點,epoll(freebsd 上是 kqueue )網路
IO 模型是nginx 處理性能高的根本理由,但並不是所有的情況下都是epoll 大獲全勝的,如果本身提供靜態服務的就只有寥寥幾個文
件,apache 的select 模型或許比epoll 更高性能。當然,這只是根據網路IO 模型的原理作的一個假設,真正的應用還是需要實測了再說
的。
2、作為 Web 伺服器:相比 Apache,Nginx 使用更少的資源,支持更多的並發連接,體現更高的效率,這點
使 Nginx 尤其受到虛擬主機提供商的歡迎。在高連接並發的情況下,Nginx是Apache伺服器不錯的替代品: Nginx在美國是做虛擬主機耐埋御生
意的老闆們經常選擇的軟體平台之一. 能夠支持高達 50,000 個並發連接數的響應, 感謝Nginx為我們選擇了 epoll and kqueue 作為開發模型.
Nginx
作為負載均衡伺服器: Nginx 既可以在內部直接支持 Rails 和 PHP 程序對外進行服務, 也可以支持作為 HTTP代理 伺服器對外進行
服務. Nginx採用C進行編寫, 不論是系統資源開銷還是CPU使用效率都比 Perlbal 要好很多.
作為郵件代理伺服器: Nginx 同時也是一個非常優秀的郵件代理伺服器(最早開發這個產品的目的之一也是作為郵件代理伺服器), Last.fm 描述了成功並且美妙的使用經驗.
Nginx 是
一個安裝非常的簡單 , 配置文件非常簡潔(還能夠支持perl語法), Bugs 非常少的伺服器: Nginx 啟動特別容易, 並且幾乎可以做到
7*24不間斷運行,即使運行數個月也不需要重新啟動. 你還能夠不間斷服務的情況下進行軟體版本的升級 .
3、Nginx 配置簡潔, Apache 復雜
Nginx 靜態處理昌岩性能比 Apache 高 3倍以上
Apache 對 PHP 支持比較簡單,Nginx 需要配合其他後端用
Apache 的組件比 Nginx 多
現在 Nginx 才是 Web 伺服器的首選
4、最核心的區別在於apache是同步多進程模型,一個連接對應一個進程;nginx是非同步的,多個連接(萬級別)可以對應一個進程
5、nginx處理靜態文件好,耗費內存少.但無疑apache仍然是目前的主流,有很多豐富的特性.所以還需要搭配著來.當然如果能確定nginx就適合需求,那麼使用nginx會是更經濟的方式.
apache有先天不支持多核心處理負載雞肋的缺點,建議使用nginx做前端,後端用apache。大型網站建議用nginx自代的集群功能
6、
從個人過往的使用情況來看,nginx的負載能力比apache高很多液旁。最新的伺服器也改用nginx了。而且nginx改完配置能-t測試一下配置有沒
有問題,apache重啟的時候發現配置出錯了,會很崩潰,改的時候都會非常小心翼翼現在看有好多集群站,前端nginx抗並發,後端apache集群,
配合的也不錯。
7、nginx處理動態請求是雞肋,一般動態請求要apache去做,nginx只適合靜態和反向。
8、從我個人的經驗來看,nginx是很不錯的前端伺服器,負載性能很好,在老奔上開nginx,用webbench模擬10000個靜態文件請求毫不吃力。apache對php等語言的支持很好,此外apache有強大的支持網路,發展時間相對nginx更久,
9、
Nginx優於apache的主要兩點:1.Nginx本身就是一個反向代理伺服器 2.Nginx支持7層負載均衡;其他的當然,Nginx可能會比
apache支持更高的並發,但是根據NetCraft的統計,2011年4月的統計數據,Apache依然佔有62.71%,而Nginx是
7.35%,因此總得來說,Aapche依然是大部分公司的首先,因為其成熟的技術和開發社區已經也是非常不錯的性能。
10、你對web server的需求決定你的選擇。大
部分情況下nginx都優於APACHE,比如說靜態文件處理、PHP-CGI的支持、反向代理功能、前端Cache、維持連接等等。在
Apache+PHP(prefork)模式下,如果PHP處理慢或者前端壓力很大的情況下,很容易出現Apache進程數飆升,從而拒絕服務的現象。
11、可以看一下nginx lua模塊...apache比nginx多的模塊,可直接用lua實現apache是最流行的,why?大多數人懶得更新到nginx或者學新事物
12、對於nginx,我喜歡它配置文件寫的很簡潔,正則配置讓很多事情變得簡單運行效率高,佔用資源少,代理功能強大,很適合做前端響應伺服器
13、Apache在處理動態有優勢,Nginx並發性比較好,CPU內存佔用低,如果rewrite頻繁,那還是Apache吧
D. 如何設置nginx和apache
我們依然盡棚慶可能採用yum來安裝我們需要的軟體,由系統官方維護的軟體,其安全性和穩定性都值得信賴,並且容易管理,升級方便,但是在CentOS和
RHEL的官方yum源中暫時沒有Nginx等軟體包,所以我們需要使用EPEL的yum源。EPEL是什麼,EPEL的鏈消握yum源怎麼添加,點擊這里查
看。
本文將要介紹的Nginx+Apache結構,其實就是Nginx做前端,Apache做後端,充分發揮他們各自的優勢之處。Nginx對於高並發性能出
眾,Proxy功能強效率高,佔用系統資源少,而Apache在高並發時對隊列的處理比FastCGI(Nginx需要通過fastcgi等方式運行
php)更好,並且在處理動態php頁面時,mod_php也比php-cgi更穩定更高效。
也就是說,我們的目的是,由Nginx來接收客戶端的請求,如果是動態頁面請求,就交給Apache處理,然後經由Nginx再返回給客戶端,其餘的請
求,則由Nginx自己處理,然後把結果返回給客戶端,。當然了,你完全可以讓Nginx只做Proxy功能,所有的請求都交給
Apache,Tomcat等處理,本文使用前者。
但是橋豎,在本文中,我們實現的是在一台伺服器里一個Nginx加一個Apache的簡單結構,在實際應用中,可能前端是由一台或多台Nginx組成的代理伺服器,後端則是多台Apache或其他Web伺服器,再加上多種第三方軟體而組成的集群。
前提約定:假設我們系統默認主站點名是www.server110.com,網站根目錄是/var/www/server110
第一步,安裝並配置Nginx,安裝完之後,配置文件都在/etc/nginx目錄下,主設置文件/etc/nginx/nginx.conf:
[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;
為了讓nginx.conf簡潔,我把一些相關的共通設定放到同一個專門的文件里,然後在主配置文件nginx.conf里載入。如果你使用了VirtualHost運營多個站點,你可以根據不同站點的需求而配置不同的設定文件,然後分別在各自的server域里載入。
第二步,安裝並配置Apache,配置文件在/etc/httpd/下,我們修改主配置文件/etc/httpd/conf/httpd.conf,配置文件太長,我只寫我需要改的地方:
[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 .py
第三步,設置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 [email protected]
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 "<?php\nphpinfo();" > /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壓縮
後話,本文旨在介紹這種結構的搭建方法,所以用到的配置參數比較少,關於更詳細的參數設置和優化,需要讀者你自己根據實際情況結合官方幫助文檔進一步去測試。
E. 怎麼一台nginx做前端 多台後端用apache
實現:
1.修改nginx配置文件,將php動態請求轉發給apache
# cat /usr/local/nginx/conf/vhosts/test.conf
server
{
listen 80;
server_name www.test.com test.com;
index index.html index.htm index.php default.html default.htm default.php;
root /home/www/data/test;
access_log /usr/local/nginx/logs/test-access.log;
# nginx找不到文件時,轉發請求給後端Apache
error_page 404 @proxy;
# 這是原來lnmp時,nginx自己將php請求提交到127.0.0.1:9000。現在由apache來處理,因此注釋掉這段。
#location ~ .*\.(php|php5)?$
#{
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# include fastcgi.conf;
#}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
# 動態文件.php請求轉發給後端Apache
location ~ \.php$ {
# 向後端伺服器發起請求時添加指定的header頭信息
proxy_set_header Host $http_host;
# 向後端伺服器發送真實 IP
proxy_set_header X-Real-IP $remote_addr;
# 讓後端如php能直接通過變數獲取真實IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080;
}
# nginx找不到文件時,轉發請求給後端Apache
location @proxy {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080;
}
}
然後只要開啟nginx監聽80埠,apache監聽8080埠,開啟php,就可以了。這邊,我同時開啟nginx,apache的訪問日誌。當我訪問www.test.com/a.html,www.test.com/info.php時,nginx記錄下了所有a.html,info.html的訪問請求。
nginx訪問日誌
192.168.45.30 - - [19/Jun/2013:14:41:06 +0800] "GET /a.html HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"
192.168.45.30 - - [19/Jun/2013:14:41:06 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"
192.168.45.30 - - [19/Jun/2013:14:41:08 +0800] "GET /info.php HTTP/1.1" 200 10518 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"
192.168.45.30 - - [19/Jun/2013:14:41:08 +0800] "GET /info.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42 HTTP/1.1" 200 2158 "http://www.test.com/info.php" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"
192.168.45.30 - - [19/Jun/2013:14:41:08 +0800] "GET /info.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 HTTP/1.1" 200 2536 "http://www.test.com/info.php" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"
192.168.45.30 - - [19/Jun/2013:14:41:08 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"
192.168.45.30 - - [19/Jun/2013:14:41:09 +0800] "GET /info.php HTTP/1.1" 200 10518 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"
當我訪問www.test.com/a.html,www.test.com/info.php時,apache只記錄了info.html的訪問請求。說明nginx將php請求轉發給了apache。這里可以看到來源都是127.0.0.1。而不是真實的來源ip。
apache訪問日誌
127.0.0.1 - - [19/Jun/2013:11:04:16 +0800] "GET /favicon.ico HTTP/1.0" 404 209
127.0.0.1 - - [19/Jun/2013:11:04:23 +0800] "GET /favicon.ico HTTP/1.0" 404 209
127.0.0.1 - - [19/Jun/2013:11:04:31 +0800] "GET /favicon.ico HTTP/1.0" 404 209
127.0.0.1 - - [19/Jun/2013:11:04:34 +0800] "GET /favicon.ico HTTP/1.0" 404 209
127.0.0.1 - - [19/Jun/2013:11:04:39 +0800] "GET /favicon.ico HTTP/1.0" 404 209
127.0.0.1 - - [19/Jun/2013:11:05:09 +0800] "GET /favicon.ico HTTP/1.0" 404 209
127.0.0.1 - - [19/Jun/2013:11:05:18 +0800] "GET /favicon.ico HTTP/1.0" 404 209
127.0.0.1 - - [19/Jun/2013:11:05:24 +0800] "GET /info.php HTTP/1.0" 200 55447
127.0.0.1 - - [19/Jun/2013:11:05:24 +0800] "GET /info.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 HTTP/1.0" 200 2524
127.0.0.1 - - [19/Jun/2013:11:05:24 +0800] "GET /info.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42 HTTP/1.0" 200 2146
127.0.0.1 - - [19/Jun/2013:11:05:24 +0800] "GET /favicon.ico HTTP/1.0" 404 209
2.apache添加mod_rpaf, 獲取nginx轉發過來的真實IP
mod_rpaf模塊不是必須安裝,除非你需要開啟apache日誌,但有多此一舉之嫌,因為已經有nginx日誌了,再開apache日誌話就出現重復了。
Apache rpaf模塊作用是獲取Nginx轉發過來的真實IP,否則在Apache日子中來訪IP全部為127.0.0.1。
# wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
# tar zxvf mod_rpaf-0.6.tar.gz
# cd mod_rpaf-0.6
# /usr/local/www/apache/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
安裝過程中,若出現error: 'conn_rec' has no member named 'remote_ip,請參考附錄1.mod_rpaf-2.0.c error: 'conn_rec' has no member named 'remote_ip
# vim /usr/local/apache/conf/httpd.conf //在LoadMole後添加以下內容
LoadMole rpaf_mole moles/mod_rpaf-2.0.so
RPAFenable On
RPAFproxy_ips 127.0.0.1
RPAFsethostname On
RPAFheader X-Forwarded-For
F. nginx和apache有什麼區別,我該用哪種
1、在功能方面
Apache是同步多進程模型,一個連接只能對應一個進程,而Nginx 是非同步的,多個連接(萬級別)可以對應一個進程 。
另外Nginx處理靜態文件好,在性能和速度方面要比Apache有優勢。而Apache在處理動態文件上要優於Nginx,在rewrite頻繁的情況下,大多會選擇使用Apache。
2、安全性方面
Apache成立時間要比Nginx早,在安全性方面要更有經驗 ,bug代碼少,可以比Nginx更專業地處理DDoS等答散鋒網路攻擊,比較穩定。一般來說,如果需要性能的Web伺服器,大多用戶會選擇Nginx 。如果不需要太多的性能只求穩定,使用Apache還是非常不錯的。
3、在靈活性方掘檔面
與Nginx使用事件驅動技術來管理客戶端請求不同,Apache更傾向於多線程方法,Nginx處理更多客戶端的方法是有效的。清晌Apache可以動態載入和卸載模塊,而Nginx在模塊方面沒有那麼靈活。但Apache和Nginx都可以部署為單獨的Web伺服器。