① Nginx+php(FastCGI)高性能伺服器怎麼搭建呢
Nginx+php(FastCGI)+Memcached+Mysql+APC Nginx高性能web伺服器安裝 APC模塊安裝 linux apc 配置安裝
參考資料 http://wgkgood.gicp.net問題補充:
不是 主要是網路不收錄 他們說經常在網路知道什麼的提問題,然後發表一些好文章附帶自己的網站,這樣會收錄快一些,謝謝一樓!謝謝大家的支持!
最佳答案 Nginx+php(FastCGI)+Memcached+Mysql+APC Nginx高性能web伺服器安裝 APC模塊安裝 linux apc 配置 fastCGI安裝配置3前言*
Nginx+php(FastCGI)+Memcached+Mysql+APC 是目前主流的高性能伺服器搭建方式!適合大中型網站,小型站長也可以採用這種組合!
Nginx 超越 Apache 的高性能和穩定性,使得國內使用 Nginx 作為 Web 伺服器的網站也越來越多,其中包括國內最大的電子地圖MapBar、新浪博客、新浪播客、網易新聞等門戶網站頻道,六間房、56.com等視頻分享網站,Discuz!官方論壇、水木社區等知名論壇,豆瓣、YUPOO相冊、海內SNS、迅雷在線等新興Web 2.0網站,更多的網站都在使用Nginx配置。
【Nginx+php(FastCGI)+Memcached+Mysql+APC Nginx高性能web伺服器安裝 APC模塊安裝 linux apc 配置 fastCGI安裝配置】
下載所需的安裝包:這里採用源碼包編譯安裝:本博客集成下載
http://wgkgood.gicp.net/download/nginx-0.7.61.tar.gz
http://wgkgood.gicp.net/download/pcre-8.01.tar.gz
http://wgkgood.gicp.net/download/memcache-2.2.5.tgz
http://wgkgood.gicp.net/download/libevent-1.4.12-stable.tar.gz
http://wgkgood.gicp.net/download/APC-3.1.4.tgz
下載到 /usr/src下
另外還有兩個包mysql-5.1.41.tar.gz、php-5.3.5.tar.gz 【其他相似版本也可以!】可以在官網下載。
一、正式安裝Nginx、【安裝nginx之前需要安裝pcre包和zlib以支持重寫,正則以及網頁壓縮等等】
(1)首先安裝pcre:
cd /usr/src &&tar xzf pcre-8.01.tar.gz &&cd pcre-8.01 && ./configure –prefix=/usr/local/pcre &&make &&make install
(2)、然後再安裝nginx :
useradd www && cd /usr/src && tar xzf nginx-0.7.61.tar.gz &&cd nginx-0.7.61 && ./configure –prefix=/usr/local/nginx –with-http_stub_status_mole –with-openssl=/usr/ –with-pcre=/usr/src/pcre-8.01 –user=www –group=www &&make &&make install
【nginx注意* –with-pcre=/usr/src/pcre-8.01指向的是源碼包解壓的路徑,而不是安裝的路徑,否則會報
make[1]: *** [/usr/local/pcre/Makefile] Error 127 錯誤】
二、接下來安裝mysql
cd /usr/src && tar xzf mysql-5.1.41.tar.gz && cd mysql-5.1.41 && ./configure –prefix=/usr/local/mysql/ –enable-assembler –with-extra-charsets=complex –enable-thread-safe-client –with-big-tables –with-readline –with-ssl –with-embedded-server –enable-local-infile –with-plugins=innobase && make &&make install
(2)、mysql安裝完畢,創建mysql用戶和組並初始化資料庫,並啟動資料庫。
cd /usr/local/mysql && useradd mysql && chown -R mysql:mysql /usr/local/mysql && /usr/local/mysql/bin/mysql_install_db –user=mysql && chown -R mysql:mysql var/ && ./bin/mysqld_safe –user=mysql &
即可。【如果mysql啟動報錯,請檢查 /usr/local/mysql/var 目錄,mysql是否有許可權】
三、安裝 php :
cd /usr/src &&tar xzf php-5.3.5.tar.gz && cd php-5.3.5 && ./configure –prefix=/usr/local/php –with-config-file-path=/usr/local/php/etc –with-mysql=/usr/local/mysql –with-mysqli=/u
sr/local/mysql/bin/mysql_config –with-iconv-dir=/usr/local –with-freetype-dir –with-jpeg-dir –with-png-dir –with-zlib –with-li
bxml-dir=/usr –enable-xml –disable-rpath –enable-discard-path –enable-safe-mode –enable-bcmath –enable-shmop –enable-sysvsem
–enable-inline-optimization –with-curl –with-curlwrappers –enable-mbregex –enable-fpm –enable-sockets && make &&make install
安裝完畢!【注意這個參數在此可以不加–enable-fastcgi;其他之前版本需要加上,以上安裝根據自己的選擇添加,如果報錯,根據具體報錯找原因】
四、整合Nginx和php(FastCGI)安裝完php-5.3.5後支持fastCGI
(1)、配置nginx ,拷貝nginx配置文件:
user www www;
worker_processes 8;
error_log /usr/local/logs/nginx/error.log crit;
pid /usr/local/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;
events
{
use epoll;
worker_connections 51200;
}
http
{
include mime.types;
default_type application/octet-stream;
#charset gb2312;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
#limit_zone crawler $binary_remote_addr 10m;
server
{
listen 80;
server_name wgkgood.gicp.net;
index index.php index.htm index.html;
root /usr/webapps/www;
#limit_conn crawler 20;
location ~ .*\.(php|php5)?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
log_format access 『$remote_addr – $remote_user [$time_local] 「$request」 『
『$status $body_bytes_sent 「$http_referer」 『
『」$http_user_agent」 $http_x_forwarded_for』;
access_log /usr/local/logs/nginx/access.log access;
}
}
Nginx配置完畢!啟動nginx ;/usr/local/nginx/sbin/nginx 即可,重啟nginx命令如下/usr/local/nginx/sbin/nginx –s reload
此配置文件僅供參考,感謝張宴老師!
(2)、配置fcgi.conf文件如下
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with –enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
五、配置php配置文件:
cd /usr/local/php5/etc/ && cp
php-fpm.conf.default php-fpm.conf 然後根據提示修改php-fpm.conf裡面的選項。
配置完畢後,啟動php-fpm
cp /usr/src/php-5.3.5/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm 然後啟動 /etc/init.d/php-fpm start 即可。
六、安裝apc配置:
cd /usr/src && tar xzf APC-3.1.4.tgz &&cd APC-3.1.4
/usr/local/php5/bin/phpize 【增加擴展模塊】
./configure –enable-apc –enable-apc-mmap –with-php-config=/usr/local/php5/bin/php-config
&&make&& make install
安裝完後會生成一個apc.so在/usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/裡面。
七、安裝memcached,使fastcGI支持memcached
首先安裝libevent,
cd /usr/src && tar xzf libevent-1.4.12-stable.tar.gz && cd libevent-1.4.12-stable && ./configure –prefix=/usr/local/libevent &&make && make install
然後安裝memcached
tar xzf memcache-2.2.5.tar.gz && cd memcache-2.2.5 && /usr/local/php5/bin/phpize && ./configure –prefix=/usr/local/memcached –with-libevent=/usr/local/libevent –with-php-config=/usr/local/php5/bin/php-config &&make &&make install
安裝完後,會在/usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/里生成一個memcache.so 這個模塊:
八、接下來修改php.ini
默認的php.ini在/usr/local/php5/lib/php.ini 你也可以指定:
extension_dir = 「./」
修改為
extension_dir=」/usr/local/php5/lib/php/extensions/no-debug-non-zts-20090626〃
把下面這些添加到最後:
extension = apc.so
extension=memcache.so //這里引用緩存模塊
[APC]
apc.enabled = 1
apc.shm_segments = 1
apc.shm_size = 64M
apc.optimization = 1
apc.num_files_hint = 0
apc.ttl=7200
apc.user_ttl=7200
apc.gc_ttl = 3600
apc.cache_by_default = on
安裝到此已經完成!
重新啟動nginx和php-fpm ,用測試頁面訪問。
此文章僅供參考!有不妥之處歡迎指正!共同學習!
http://wgkgood.gicp.net 本博客採用的nginx+fastcGI+mysql+memcached+apc完美架構整合!
感謝張宴老師
http://blog.s135.com/nginx_php_v6/
② php-fpm 找不到 php-cgi.sock 怎麼辦
如果php-fpm已經啟用了,那麼就是你的nginx或者apache是通過使用tcp方式連接php-fpm的
如果要用socket方式連接,就是php-cgi.sock,要修改php-fpm配置文件並且重啟
php-fpm配置中有(還有種配置文件時xml格式的,你可以看下參考)
#listen = 127.0.0.1:9000
#找到並改為
listen=/tmp/php-fpm.sock
詳細信息可以參考:
http://www.tocus.com.cn/?send=article_show&id=228&class=2
希望對你有幫助
③ 了解PHP-FPM
在伺服器上,當我們查看php進程時,全都是php-fpm進程,大家都知道這個就是php的運行環境,那麼,它到底是個什麼東西呢?
PHP-FPM,就是PHP的FastCGI管理器,用於替換PHP FastCGI的大部分附加功能,在PHP5.3.3後已經成為了PHP的標配。
有小夥伴要問了,FastCGI又是什麼鬼?CGI程序又叫做「通用網關介面」,就是讓Web伺服器和你的應用程序進行交互的一個介面。就像nginx中需要配置的fastcgi_pass,一般我們會使用127.0.0.1:9000或者unix:/tmp/php-cgi.sock來配置這個參數。它的意思就是告訴nginx,過來的請求使用tcp:9000埠的監聽程序來處理或者使用unix/socket來處理。它們都是指向的PHP運行程序。
再說得通俗一點,我們運行php腳本用的是
php-fpm就相當於是這個php命令。nginx通過fastcgi_pass來運行php $nginx_root(nginx配置文件中網站根目錄root配置)下的index.php。所以,如果你用的是python或者其他什麼語言,都可以用它們的cgi程序來讓nginx調用。
FastCGI和CGI又有什麼不同呢?FastCGI是啟動一個socket介面,伺服器應用不需要自己去運行php,只需要向這個socket介面提交請求就可以了。
php-fpm在編譯php時需要添加--enable-fpm。一些通用的集成安裝包如lnmp、phpStudy等都會默認編譯並使用php-fpm,畢竟是標配。
上文中說過nginx可以使用127.0.0.1:9000和unix:/tmp/php-cgi.sock這兩種方式來調用php-fpm。它們有什麼區別呢?
前者,一般帶9000埠號的,是tcp形式的調用。也就是php-fpm啟動了一個監聽進程對9000埠進行監聽。它會調起一個tcp/ip服務,nginx在調用的時候會走一次tcp請求流程,也就是3次握手4次揮手,會走到網路七層中的第四層傳輸層。相對來說這種方式性能會稍差一點,啟動php-fpm後使用nestat查看埠中會出現9000埠的佔用。
後者,使用的是unix套接字socket服務,通過sock文件來交換信息,性能相對好一些,因為它沒有tcp連接過程,也不會有9000埠的佔用。
對於高負載大訪問量的網站還是推薦使用unix方式,對於普通小網站來說,無所謂使用哪個都可以,tcp方式反而更容易配置和理解,也是php-fpm.conf中默認的監聽方式。
php-fpm.conf配置中的listen屬性用來配置監聽,這里的配置要和nginx中的一致,使用tcp的就監聽127.0.0.1:9000,使用unix的就設置成/tmp/php-cgi-56.sock。
以下內容摘自官方文檔:
===========
各自媒體平台均可搜索【硬核項目經理】
④ Nginx跟php和mysql資料庫怎麼連接的
nginx 通過libevent 建立了網路連接池,通過nginx的 fast_cgi配置 (fastcgi_pass ip:port),用tcp 127.0.0.1:9000 方式連接 或者 unix socket unix:///var/run/unix.sock 方式 連接,php 與mysql 通過 php _ mysql* 擴展,實現的tcp連接 (可以持久連接或非持久連接)
⑤ ubuntu nginx可否使用php
能用,具體的1.安裝Nginx
apt-get install nginx
2.啟動Nginx
service nginx start
3.訪問伺服器IP
如果看到「Welcome to nginx!」說明安裝好了。
4.安裝PHP
apt-get install php5-fpm
5.配置Nginx
找到下列代碼,去掉相應注釋
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}希望能幫到你,我還要自己在後盾人平台努力學習呢,一起加油吧😄∠( ᐛ 」∠)_
⑥ 502 Bad Gateway的可能原因,及解決方法
一:可能的原因是php-fpm未開啟,查看php-fpm狀態,若未開啟,開啟後重試
開啟php-fpm,查看狀態
systemctl start php73-php-fpm
systemctl status php73-php-fpm
重新打開網頁
第二次遇到502
第二次遇到502,上面的方法試了,但是問題沒有解決
感覺有可能是配置問題,最終參照 https://blog.csdn.net/ucmir183/article/details/80240112 的解決方法,解決了
我的配置裡面是這樣的
location ~* \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
輸入命令 netstat -tlnp | grep 9000 並沒有監聽9000的程序
Nginx和PHP-FPM的進程間通信有兩種方式,一種是TCP,一種是UNIX Domain Socket.
其中TCP是IP加埠,可以跨伺服器.而UNIX Domain Socket不經過網路,只能用於Nginx跟PHP-FPM都在同一伺服器的場景.用哪種取決於你的PHP-FPM配置:
方式1:
php-fpm.conf: listen = 127.0.0.1:9000
nginx.conf: fastcgi_pass 127.0.0.1:9000;
方式2:
php-fpm.conf: listen = /tmp/php-fpm.sock
nginx.conf: fastcgi_pass unix:/tmp/php-fpm.sock;
在配置文件中看了一下,發現初始化時就有一個文件
查閱了自己以前的配置,以前使用php7.2與php7.3時是沒有這個文件的
於是把這個文件刪除是了一下,重啟nginx報錯
好奇心驅使,進入文件看了一下
於是進入自己配置的文件中,修改
重啟nginx伺服器,問題解決
參考地址:https://blog.csdn.net/ucmir183/article/details/80240112
⑦ php-fpm 找不到 php-cgi.sock 怎麼辦
php-fpm有兩種listen方式,一種是通過埠來操作,一種是sock文件。
在nginx的server配置當中,如果設置為fastcgi_pass unix:/tmp/php-cgi.sock的話,有可能會出現502錯誤,這是以為nginx此項沒有找到php-cgi.sock文件或者許可權問題導致的,我們也可以改成fastcgi_pass:127.0.0.1:9000來修正這個錯誤 。
當我們用php-fpm來管理我們的php啟動時,按照如下的配置,就會自動生成/tmp/php-cgi.sock文件,然後再訪問的話就不回出現502 Gateway錯誤了。配置如下:
[global]
pid = /var/run/php-fpm.pid
error_log = /var/log/php-fpm.log
log_level = notice
[www]
listen = /tmp/php-cgi.sock
user = www
group = www
pm = dynamic
pm.max_children = 20
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
註:將php.ini里的cgi.fix_pathinfo設置為0,不然會有漏洞~
⑧ linux配置nginx+php,但是無法訪問PHP文件,能訪問html
nginx調用PHP有sock方式和埠方式
1、確認nginx已經調用了php;
2、先確認你的nginx使用什麼方式調用PHP;
3、如果使用埠方式,埠對不對應,如果使用SOCK方式,那麼路徑對不對;
⑨ nginx 只讓php入口文件訪問,其他php文件禁止直接訪問
你用的系統是微擎嗎?
正常來說,除了這兩個php文件,和回調用的介面外,其它php都是不能直接訪問的,文件頭有常量判斷,未定義就退出了。
所以你的系統有上傳漏洞,應該檢查是哪裡出了問題,並去修復一下。可以從以下幾點著手:
上傳許可權僅提供給已登錄會員,在上傳介面中判斷未登錄狀態的,直接返回錯誤信息
上傳文件類型限制,如果需要的是圖片,嚴格限制圖片類型,並做圖片規格檢測(gd庫就可以處理),不符合的不保存文件
文件名處理,不要使用客戶端上傳的文件名保存,而是根據規則 生成一個隨機的名字保存
上傳頻率限制(根據會員限制),比如,一個小時內限制上傳5張,一天限制100張,可以有效防止黑客利用上傳介面填充垃圾文件到你的伺服器
如果可行,對上傳文件做一個臨時機制,如上傳的文件先放到臨時文件夾,資料保存的時候,把文件處理一下,移動到正常的附件目錄。這樣就可以定期清理臨時文件夾,防止上傳後沒使用的文件過多佔用伺服器空間。
不過這個功能改起來會復雜一點,要處理所有使用到上傳功能的介面。
以上幾點處理好,被上傳可執行文件的問題基本上可以杜絕了
而你的解決方案,是只治標不治本的方案
⑩ 如何正確配置 Nginx 和 PHP
直接貼上代碼逐行進行講解,此處貼出一個能正常啟動php腳本的最簡nginx vhost配置:
[plain] view plain
server {
listen 8011;
server_name test.cn;
location ~ \.php?.*$ {
root /share/test;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
1、第一個大括弧 server{ }:不必多說,代表一個獨立的server,
2、listen 8011:代表該server監聽8011埠
3、location ~ \.php?.*${
}:代表一個能匹配對應uri的location,用於匹配一類uri,並對所匹配的uri請求做自定義的邏輯、配置。這里的location,匹配了所有帶.php的uri請求,例如:http://192.168.244.128:8011/test.php/asdasd
http://192.168.244.128:8011/index.php等
4、root /share/test:請求資源根目錄,告訴匹配到該location下的uri到/share/teset文件夾下去尋找同名資源。
5、fastcgi_pass 127.0.0.1:9000:這行開始是本文的重點:這行代碼的意思是,將進入到該location內的uri請求看做是cgi程序,並將請求發送到9000埠,交由php-fpm處理。
6、fastcgi_param SCRIPT_FILENAME
$document_root$fastcgi_script_name;
:這行配置意思是:動態添加了一行fastcgi配置,配置內容為SCRIPT_FILENAME,告知管理進程,cgi腳本名稱。由於我的nginx中只有fastcgi_params文件,沒有fastcgi.conf文件,所以要使php-fpm知道SCRIPT_FILENAME的具體值,就必須要動態的添加這行配置。
7、include fastcgi_params; 引入fastcgi配置文件
以上就是最簡潔版的nginx啟動php腳本的最簡配置,當重啟nginx之後,在/share/test目錄下創建一個xx.php文件,輸入<?php
echo "hello world"; ?>保存,然後在瀏覽器中訪問localhost:8011/xx.php
就可以在網頁上顯示hello world了。