CentOS7下搭建Nginx+PHP7的安裝配置

一、安裝編譯工具及庫文件:

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

環境要求

安裝nginx需要先將官網下載的源碼進行編譯,nginx是C語言開發,編譯依賴gcc環境,如果沒有gcc環境,需要安裝gcc:yum install gcc-c++

zlib庫提供了很多種壓縮和解壓縮的方式,nginx使用zlib對http包的內容進行gzip,所以需要在linux上安裝zlib庫。

OpenSSL 是一個強大的安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協議,並提供豐富的應用程序供測試或其它目的使用。nginx不僅支持http協議,還支持https(即在ssl協議上傳輸http),所以需要在linux安裝openssl庫。

二、首先要安裝 PCRE

PCRE(Perl Compatible Regular Expressions)是一個Perl庫,包括 perl 兼容的正則表達式庫。nginx的http模塊使用pcre來解析正則表達式,所以需要安裝pcre庫。

注:pcre-devel是使用pcre開發的一個二次開發庫。nginx也需要此庫。

1、PCRE 作用是讓 Nginx 支持 Rewrite 功能。

cd /usr/local/src/   # 進入目錄

下載 PCRE 安裝包,下載地址: http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz

 

下載命令使用方法:

 

在Linux命令行下面下載文件,通過wget是比較普遍簡單的,比如在CentOS7 裏面也一樣。
我們先來看下自己的CentOS7 系統有沒有安裝wget:

[root@test redis]# rpm -qa|grep wget
如果安裝了會提示當前安裝的版本:

wget-1.14-15.el7_4.1.x86_64

沒安裝的話可以通過以下命令安裝:

yum install -y wget
1
安裝好wget,我們要下載文件,一般是wget http://wwww.xxxxx 這種格式下載到默認的download目錄。

那如果我們要下載到指定目錄呢?通過 -P 參數:

命令:wget -P /保存文件的目錄 文件下載地址
 

2、解壓安裝包:

tar -zxvf pcre-8.35.tar.gz

3、進入安裝包目錄

cd pcre-8.35/

4、編譯安裝 

./configure

make && make install

5、查看pcre版本

 pcre-config --version

三、安裝 Nginx

1、下載 Nginx,下載地址:http://nginx.org/download/nginx-1.14.1.tar.gz

生產環境中建議使用Stable version(穩定版)

注意各版本的區別:Nginx官網提供了三個類型的版本

(1)Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以說是開發版
(2)Stable version:最新穩定版,生產環境上建議使用的版本
(3)Legacy versions:老版本的穩定版

cd /usr/local/src/

wget http://nginx.org/download/nginx-1.14.1.tar.gz

2、解壓安裝包:

tar -zxvf nginx-1.14.1.tar.gz

3、進入安裝包目錄

cd nginx-1.14.1/

4、編譯安裝

./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35      # 編譯源碼包代碼,追加--prefix參數,指定稍後源碼包程序的安裝路徑

make      # 生成二進制安裝程序

make install     # 運行二進制安裝程序

5、查看nginx版本

/usr/local/webserver/nginx/sbin/nginx -v

到此,nginx安裝完成。

四、Nginx 配置

創建 Nginx 運行使用的用戶和組 www

groupadd www
useradd -g www www

配置nginx.conf ,將 /usr/local/webserver/nginx/conf/nginx.conf 替換爲以下內容

mv nginx.conf nginx.conf-backup     # 備份nginx的配置文件

vim nginx.conf     # 新建nginx的配置文件,寫入以下內容

user www www;
worker_processes 2;   # 設置值和系統CPU核心數一致,可自定義
error_log /usr/local/webserver/nginx/logs/nginx_error.log crit;  # 日誌位置和日誌級別
pid /usr/local/webserver/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;
events
{
use epoll;
worker_connections 65535;
}
http
{
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';

#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虛擬主機的配置
server
{

listen 8000;   # 監聽端口(根據自己的需求更改)
server_name localhost;   # 域名
index index.html index.htm index.php;
root /usr/local/webserver/nginx/html;   # 站點目錄(也就是以後存放php文件的根目錄)
location ~ .*\.(php|php5)?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;   # 需要特別注意這個配置,這裏是用來連接Nginx和PHP的php-fpm服務的默認端口9000,php-fpm服務後面會安裝,可以根據自己的需求更改
fastcgi_index index.php;
include fastcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico)$
{
expires 30d;
# access_log off;
}
location ~ .*\.(js|css)?$
{
expires 15d;
# access_log off;
}
access_log off;
}

}

檢查配置文件nginx.conf的正確性命令:

/usr/local/webserver/nginx/sbin/nginx -t

五、啓動 Nginx

Nginx 啓動命令如下:

/usr/local/webserver/nginx/sbin/nginx
ps -ef | grep nginx

六、訪問Nginx

從瀏覽器訪問我們配置的站點IP,如果出現Welcome to nginx!那麼nginx就安裝成功了!

Nginx 其他命令

以下包含了 Nginx 常用的幾個命令:

/usr/local/webserver/nginx/sbin/nginx -s reload      # 重新載入配置文件

/usr/local/webserver/nginx/sbin/nginx -s reopen     # 重啓nginx

/usr/local/webserver/nginx/sbin/nginx -s stop         # 停止nginx

七、安裝PHP7

(1)安裝php7

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

yum install php70w.x86_64 php70w-cli.x86_64 php70w-common.x86_64 php70w-gd.x86_64 php70w-ldap.x86_64 php70w-mbstring.x86_64 php70w-mcrypt.x86_64 php70w-mysql.x86_64 php70w-pdo.x86_64

安裝完成後鍵入php -v會顯示出php的版本,代表php安裝完成了,接着往下看。

Nginx和PHP都安裝完成了,此時還得配置php-fpm服務。讓nginx與php連接起來,才能使用。

(2)安裝php-fpm

yum install php70w-fpm php70w-opcache

打開php-fpm配置文件

vim /etc/php-fpm.d/www.conf

修改以下內容(這裏查找配置項時,可以在末行模式下使用斜槓加要查找的關鍵字回車查找,如下圖所示)

將listen.owner與listen.group參數分別修改爲www

(3)最後,把三個參數修改完成後:wq退出,然後啓動 php-fpm 服務

systemctl start php-fpm

注意:/var/log/php-fpm/error.log文件是php-fpm服務的錯誤日誌文件,要是有什麼錯誤可以去查看,我遇到了php-fpm服務默認9000端口被佔用,導致php-fpm服務啓動不了,要是你也遇到,更改衝突端口。

(4)開機啓動設置

systemctl enable php-fpm
systemctl daemon-reload

PHP-FPM 即 PHP FastCGI 進程管理器,要了解 PHP-FPM ,首先要看看 CGI 與 FastCGI 的關係。

CGI 的英文全名是 Common Gateway Interface,即通用網關接口,是 Web 服務器調用外部程序時所使用的一種服務端應用的規範。

早期的 Web 通信只是按照客戶端請求將保存在 Web 服務器硬盤中的數據轉發過去而已,這種情況下客戶端每次獲取的信息也是同樣的內容(即靜態請求,比如圖片、樣式文件、HTML文檔),而隨着 Web 的發展,Web 所能呈現的內容更加豐富,與用戶的交互日益頻繁,比如博客、論壇、電商網站、社交網絡等。

這個時候僅僅通過靜態資源已經無法滿足 Web 通信的需求,所以引入 CGI 以便客戶端請求能夠觸發 Web 服務器運行另一個外部程序,客戶端所輸入的數據也會傳給這個外部程序,該程序運行結束後會將生成的 HTML 和其他數據通過 Web 服務器再返回給客戶端(即動態請求,比如基於 PHP、Python、Java 實現的應用)。利用 CGI 可以針對用戶請求動態返回給客戶端各種各樣動態變化的信息。

 

FastCGI 顧名思義,是 CGI 的升級版本,爲了提升 CGI 的性能而生,CGI 針對每個 HTTP 請求都會 fork 一個新進程來進行處理(解析配置文件、初始化執行環境、處理請求),然後把這個進程處理完的結果通過 Web 服務器轉發給用戶,剛剛 fork 的新進程也隨之退出,如果下次用戶再請求動態資源,那麼 Web 服務器又再次 fork 一個新進程,如此週而復始循環往復。

而 FastCGI 則會先 fork 一個 master 進程,解析配置文件,初始化執行環境,然後再 fork 多個 worker 進程(與 Nginx 有點像),當 HTTP 請求過來時,master 進程將其會傳遞給一個 worker 進程,然後立即可以接受下一個請求,這樣就避免了重複的初始化操作,效率自然也就提高了。而且當 worker 進程不夠用時,master 進程還可以根據配置預先啓動幾個 worker 進程等着;當空閒 worker 進程太多時,也會關掉一些,這樣不僅提高了性能,還節約了系統資源。

這樣一來,PHP-FPM 就好理解了,FastCGI 只是一個協議規範,需要每個語言具體去實現,PHP-FPM 就是 PHP 版本的 FastCGI 協議實現,有了它,就是實現 PHP 腳本與 Web 服務器(通常是 Nginx)之間的通信,同時它也是一個 PHP SAPI,從而構建起 PHP 解釋器與 Web 服務器之間的橋樑。

PHP-FPM 負責管理一個進程池來處理來自 Web 服務器的 HTTP 動態請求,在 PHP-FPM 中,master 進程負責與 Web 服務器進行通信,接收 HTTP 請求,再將請求轉發給 worker 進程進行處理,worker 進程主要負責動態執行 PHP 代碼,處理完成後,將處理結果返回給 Web 服務器,再由 Web 服務器將結果發送給客戶端。這就是 PHP-FPM 的基本工作原理

(5)在之前設置的php目錄下,新建一個php文件用於測試。

在 /usr/local/webserver/nginx/html 目錄下建立 index.php 文件

cd /usr/local/webserver/nginx/html

vim index.php

(6)輸入以下內容:

<?php
 phpinfo();
?>

退出保存

(7)重啓Nginx

/usr/local/webserver/nginx/sbin/nginx -s reopen     # 重啓nginx

/usr/local/webserver/nginx/sbin/nginx    # 啓動nginx

ps -ef | grep nginx    # 以全格式查看所有nginx服務的進程信息

 

(8)然後,在瀏覽器上訪問你的IP地址:端口號/index.php如果看到以下畫面,則說明我們的 nginx + php 成功關聯上了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章