這篇文章主要介紹“在服務(wù)器上怎么安裝配置PHP-FPM和Nginx ”,在日常操作中,相信很多人在在服務(wù)器上怎么安裝配置PHP-FPM和Nginx 問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”在服務(wù)器上怎么安裝配置PHP-FPM和Nginx ”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!
成都創(chuàng)新互聯(lián)是一家網(wǎng)站制作、網(wǎng)站建設(shè),提供網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),網(wǎng)站制作,建網(wǎng)站,按需設(shè)計(jì)網(wǎng)站,網(wǎng)站開發(fā)公司,自2013年起是互聯(lián)行業(yè)建設(shè)者,服務(wù)者。以提升客戶品牌價(jià)值為核心業(yè)務(wù),全程參與項(xiàng)目的網(wǎng)站策劃設(shè)計(jì)制作,前端開發(fā),后臺(tái)程序制作以及后期項(xiàng)目運(yùn)營并提出專業(yè)建議和思路。
PHP-FPM(PHP FastCGI Process Manager),是用于管理 PHP 進(jìn)程池的軟件,用于接收和處理來自 Web 服務(wù)器(如Nginx)的請(qǐng)求。PHP-FPM會(huì)創(chuàng)建一個(gè)主進(jìn)程(通常以操作系統(tǒng)中根用戶的身份運(yùn)行),控制何時(shí)以及如何把 HTTP 請(qǐng)求轉(zhuǎn)發(fā)給一個(gè)或多個(gè)子進(jìn)程處理。PHP-FPM 主進(jìn)程還控制著什么時(shí)候創(chuàng)建和銷毀 PHP 子進(jìn)程。PHP-FPM 進(jìn)程池中的每個(gè)進(jìn)程存在的時(shí)間都比單個(gè) HTTP 請(qǐng)求長(zhǎng),可以處理10、50、100或更多的 HTTP 請(qǐng)求。
# Ubuntu sudo apt-get install python-software-properties sudo add-apt-repository ppa:ondrej/php-5.6 sudo apt-get update sudo apt-get install php5-fpm php5-cli php5-curl \ php5-gd php5-json php5-mcrypt php5-MySQLnd
在 Ubuntu 中,PHP-FPM 的主配置文件是 /etc/php5/fpm/php-fpm.conf
。
下面是 PHP-FPM 最重要的全局配置,建議把默認(rèn)值改成下面的值:
emergency_restart_threshold = 10
在指定時(shí)間內(nèi),如果失效的 PHP-FPM 子進(jìn)程數(shù)超過這個(gè)值,PHP-FPM 主進(jìn)程就優(yōu)雅重啟
emergency_restart_interval = 1m
設(shè)定 emergency_restart_threshold
采用的時(shí)間跨度
這兩個(gè)配置是 PHP-FPM 進(jìn)程的基本安全保障,能解決簡(jiǎn)單的問題,但是不能解決由拙劣的 PHP 代碼引起的重大問題。
PHP-FPM 配置文件的其它配置內(nèi)容是一個(gè)名為 Pool Definitions 的區(qū)域,這個(gè)區(qū)域里的配置用于設(shè)置每個(gè) PHP-FPM 進(jìn)程池,PHP-FPM 進(jìn)程池是一系列相關(guān)的 PHP 子進(jìn)程。通常,一個(gè) PHP 應(yīng)用有自己的一個(gè) PHP-FPM 進(jìn)程池。
在 Ubuntu 中,Pool Definitions 區(qū)域只有下面這行內(nèi)容:
include=/etc/php5/fpm/pool.d/*.conf
這行代碼的作用是讓 PHP-FPM 加載 /etc/php5/fpm/pool.d
目錄中的各個(gè)進(jìn)程池定義文件。進(jìn)入這個(gè)目錄,應(yīng)該會(huì)看到一個(gè)名為 www.conf
的文件,這是名為 www
的默認(rèn) PHP-FPM 進(jìn)程池配置文件。
各個(gè) PHP-FPM 進(jìn)程池都以指定的操作系統(tǒng)用戶和用戶組的身份運(yùn)行。我們要配置默認(rèn)的 www
PHP-FPM 進(jìn)程池,讓它以 deploy
用戶和用戶組的身份運(yùn)行:
user = deploy
group = deploy
listen = 127.0.0.1:9000
:PHP-FPM 進(jìn)程池監(jiān)聽的IP地址和端口號(hào),讓 PHP-FPM 只接受 Nginx 從這里傳入的請(qǐng)求,127.0.0.1:9000
讓指定的 PHP-FPM 進(jìn)程池監(jiān)聽本地端口 9000
進(jìn)入的連接。
listen.allowed_clients = 127.0.0.1
:可以向這個(gè) PHP-FPM 進(jìn)程池發(fā)送請(qǐng)求的IP地址(一個(gè)或多個(gè)),為了安全,我把這個(gè)設(shè)置為 127.0.0.1
,即只有當(dāng)前設(shè)備能把請(qǐng)求轉(zhuǎn)發(fā)給這個(gè) PHP-FPM 進(jìn)程池。
pm.max_children = 15
:這個(gè)設(shè)置設(shè)定任何時(shí)間點(diǎn) PHP-FPM 進(jìn)程池中最多能有多少個(gè)進(jìn)程。這個(gè)設(shè)置沒有絕對(duì)正確的值,你應(yīng)該測(cè)試你的 PHP 應(yīng)用,確定每個(gè) PHP 進(jìn)程需要使用多少內(nèi)存,然后把這個(gè)設(shè)置設(shè)定為可用內(nèi)存能容納的 PHP 進(jìn)程總數(shù)。
pm.start_servers = 3
:PHP-FPM 啟動(dòng)時(shí) PHP-FPM 進(jìn)程池立即可用的進(jìn)程數(shù)。
pm.min_spare_servers = 2
:PHP 應(yīng)用空閑時(shí) PHP-FPM 進(jìn)程池中可以存在的進(jìn)程數(shù)量最小值。這個(gè)設(shè)置的值一般和 pm.start_servers
一樣。
pm.max_spare_servers = 4
:PHP 應(yīng)用空閑時(shí) PHP-FPM 進(jìn)程池中可以存在的進(jìn)程數(shù)量最大值。
pm.max_requests = 1000
:回收進(jìn)程之前,PHP-FPM 進(jìn)程池中各個(gè)進(jìn)程最多能處理的 HTTP 請(qǐng)求數(shù)量。這個(gè)設(shè)置有助于避免 PHP 擴(kuò)展或庫因?yàn)榫帉懽玖佣鴮?dǎo)致內(nèi)存不斷泄露。
slowlog = /path/to/slowlog.log
:這個(gè)設(shè)置的值是一個(gè)日志文件在文件系統(tǒng)中的絕對(duì)路徑。這個(gè)日志文件用于記錄處理時(shí)間超過 n
秒的 HTTP 請(qǐng)求信息,以便找出 PHP 應(yīng)用的瓶頸,進(jìn)而進(jìn)行調(diào)試。需要注意的是,PHP-FPM 進(jìn)程池所屬的用戶和用戶組要對(duì)這個(gè)日志文件有寫權(quán)限。
request_slowlog_timeout = 5s
:如果當(dāng)前 HTTP 請(qǐng)求的處理時(shí)間超過指定的值,就把請(qǐng)求的回溯信息寫入 slowlog
設(shè)置指定的日志文件。
編輯之后保存文件,然后重啟 PHP-FPM 主進(jìn)程:
sudo service php5-fpm restart
Nginx 是 Web 服務(wù)器,類似 Apache,不過更容易配置,而且運(yùn)行時(shí)占用內(nèi)存更少。這里我們不深入探討 Nginx,只是告訴你如何安裝,以及如何把相應(yīng)的請(qǐng)求轉(zhuǎn)發(fā)給 PHP-FPM 進(jìn)程池。
# Ubuntu sudo add-apt-repository ppa:nginx/stable sudo apt-get update sudo apt-get install nginx # CentOS sudo yum install nginx sudo systemctl enable nginx.service sudo systemctl start nginx.service
接下來,我們需要為 PHP 應(yīng)用配置一個(gè)虛擬主機(jī)。虛擬主機(jī)是一系列設(shè)置,用于告知 Nginx PHP 應(yīng)用的域名、在文件系統(tǒng)中的位置,已經(jīng)如何把 HTTP 請(qǐng)求轉(zhuǎn)發(fā)給 PHP-FPM 進(jìn)程池:
server { listen 80; server_name example.com; index index.php client_max_body_size 50M; error_log /home/deploy/apps/logs/example.error.log; access_log /home/deploy/apps/logs/example.access.log; root /home/deploy/apps/example.com/current/public; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php { try_files $uri = 404; fastcgi_split_path_info ^(.+\.php)(/.+)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_index index.php; fastcgi_pass 127.0.0.1:9000; } }
下面簡(jiǎn)要說明下每個(gè)虛擬主機(jī)設(shè)置:
listen
:設(shè)置 Nginx 監(jiān)聽哪個(gè)端口進(jìn)入的 HTTP 請(qǐng)求。一般 HTTP 請(qǐng)求從 80
端口進(jìn)入,HTTPS 請(qǐng)求從 443
端口進(jìn)入。
server_name
:用于識(shí)別虛擬主機(jī)的域名,這個(gè)要設(shè)置為你的應(yīng)用使用的域名,而且域名要指向服務(wù)器的 IP 地址。如果 HTTP 請(qǐng)求頭中 Host
首部的值和虛擬主機(jī)中 server_name
的值相匹配,Nginx 就會(huì)把這個(gè) HTTP 請(qǐng)求發(fā)送給這個(gè)虛擬主機(jī)。
index
:HTTP 請(qǐng)求 URI 沒有指定文件時(shí)的默認(rèn)文件。
client_max_body_size
:對(duì)這個(gè)虛擬主機(jī)來說,Nginx 接受 HTTP 請(qǐng)求主體長(zhǎng)度的最大值。如果請(qǐng)求主體長(zhǎng)度超過這個(gè)值,Nginx 會(huì)返回 4XX 響應(yīng)。
error_log
:這個(gè)虛擬主機(jī)錯(cuò)誤日志文件在文件系統(tǒng)中的路徑。
access_log
:這個(gè)虛擬主機(jī)訪問日志文件在文件系統(tǒng)中的路徑。
root
:應(yīng)用根目錄路徑。
除了上述設(shè)置外,還有兩個(gè) location
塊,這兩個(gè) location
塊的作用是告訴 Nginx 如何處理匹配指定 URL 模式的 HTTP 請(qǐng)求:
location / {}
使用 try_files 指令查找匹配所請(qǐng)求 URI 的文件,如果沒有找到,再查找匹配所請(qǐng)求 URI 的目錄,如果目錄也沒有找到,則把 HTTP 請(qǐng)求的 URI 重寫為 /index.php
,如果有查詢字符串的話,還會(huì)把查詢字符串附加到 URI 的末尾,這個(gè)重寫的 URL,以及所有以 .php
結(jié)尾的URI,都由 location ~ \.php {}
塊管理。
location ~ \.php {}
塊把 HTTP 請(qǐng)求轉(zhuǎn)發(fā)給 PHP-FPM 進(jìn)程池進(jìn)行處理,在這個(gè)塊中我們把 PHP 請(qǐng)求轉(zhuǎn)發(fā)到端口 9000
讓 PHP-FPM 處理請(qǐng)求。
在 Ubuntu 中我們必須執(zhí)行以下命令,在 /etc/nginx/sites-enable
目錄下創(chuàng)建虛擬主機(jī)配置文件的符號(hào)鏈接:
sudo ln -s /etc/nginx/sites-available/example.conf /etc/nginx/sites-enabled/example.conf;
最后,執(zhí)行下述命令,重啟 Nginx:
# Ubuntu sudo service nginx restart # CentOS sudo systemctl restart nginx.service
現(xiàn)在服務(wù)器可以運(yùn)行 PHP 應(yīng)用了。Nginx 配置有很多種,這里只是最基本的配置,更多配置信息,請(qǐng)參考以下資源:
http://nginx.org http://www.nginx.cn https://github.com/h6bp/server-configs-nginx
配置服務(wù)器是個(gè)很漫長(zhǎng)的過程,而且很枯燥,如果手動(dòng)配置很多服務(wù)器,這種感覺會(huì)更強(qiáng)烈。幸好,有些工具可以幫我們自動(dòng)配置服務(wù)器,下面是幾個(gè)流行的服務(wù)器配置工具:
Puppet:https://puppet.com/ Chef:https://www.chef.io/ Ansible:https://www.ansible.com/ SaltStack:https://www.ansible.com/
各個(gè)工具之間有所差別,但是目標(biāo)是一致的 —— 根據(jù)精確的規(guī)則自動(dòng)配置新服務(wù)器。如果要管理多臺(tái)服務(wù)器,我強(qiáng)烈建議研究使用配置工具,這樣可以節(jié)省大量時(shí)間。
到此,關(guān)于“在服務(wù)器上怎么安裝配置PHP-FPM和Nginx ”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
網(wǎng)頁標(biāo)題:在服務(wù)器上怎么安裝配置PHP-FPM和Nginx
文章位置:http://jinyejixie.com/article6/gpggog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、服務(wù)器托管、用戶體驗(yàn)、關(guān)鍵詞優(yōu)化、電子商務(wù)、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)