Centos7 Nginx+PHP7 配置
內容:
- 源碼編譯安裝Nginx和PHP
- 配置PHP和Nginx,實現Nginx轉發到PHP處理
- 測試
- 設置Nginx、PHP開機自啟
安裝的版本:
- Nginx:1.18.0 讀音
engine x
- PHP:7.4.8
1. 源碼編譯安裝Nginx和PHP
安裝是執行源碼編譯安裝,需要有對應的庫工具,如gcc編譯和zlib壓縮這些,執行命令安裝:
shell> yum install -y openssl openssl-devel zlib zlib-devel pcre pcre-devel gcc gcc-c++ libxml2-devel libsqlite3x-devel
如果執行配置時,./configure提示缺少某些庫時,可以再復制搜索查詢所需的庫。
過程:下載->解壓->配置->編譯->安裝
shell> wget http://nginx.org/download/nginx-1.18.0.tar.gz #wget下載nginx源碼包,或者使用curl下載:curl -O http://nginx.org/download/nginx-1.18.0.tar.gz -O是--remote-name Write output to a file named as the remote file
shell> tar -zxvf nginx-1.18.0.tar.gz #解壓下載的源碼壓縮包 -z(--gzip)針對gzip的壓縮,-x(--extract)是提取,-f保留原有壓縮包的文件結構,-v打印詳情
shell> cd nginx-1.18.0 #進入目錄
shell> ./configure --prefix=/usr/local/nginx --with-http_ssl_module #執行configure會檢查所需的庫,成功后會生成一個Makefile文件,--prefix是執行安裝的路徑,--with-http_ssl_module是添加ssl模塊支持,這里不會用到
shell> make -j 8 #編譯,-j為--job,開啟8個工作任務
shell> make install #執行安裝,這里會把編譯生成的程序文件拷貝到安裝目錄下並創建相關的文件夾
過程:下載->解壓->配置->編譯->安裝
shell> wget https://www.php.net/distributions/php-7.4.8.tar.gz #如果下載慢的話,可以用迅雷粘貼url下載,應該會比這樣下載快點
shell> tar -zxvf php-7.4.7.tar.gz #解壓
shell> cd cd php-7.4.7/ #進入解壓目錄
shell> ./configure --prefix=/usr/local/php -with-config-file-path=/usr/local/php/etc --enable-fpm #執行配置檢查,--enable-fpm是開啟PHP的fpm資源管理,關於fpm可以查閱資料了解一下
shell> make -j 8 #編譯,-j為--job,開啟8個工作任務
shell> make install #執行安裝
shell> cp php.ini-development /usr/local/php/php.ini #拷貝php初始化配置文件,this file is responsible for configuring many of the aspects of PHP's behavior.
2. 配置PHP和nginx,實現Nginx轉發到PHP處理
-
nginx
shell> cd /usr/local/nginx #進入編譯安裝的nginx目錄
shell> vim conf/nginx.conf #修改nginx的配置文件
修改默認的location
塊:
location / {
root html;
index index.html index.htm index.php; #添加PHP的index首頁
}
再添加處理以.php結尾的location
塊:
location ~* \.php$ {
fastcgi_index index.php; #PHP index頁面
fastcgi_pass 127.0.0.1:9000; #配置fastcgi服務器,請求會轉發到fastcgi服務器(可以理解為PHP解析器),IP和端口在php中配置
include fastcgi_params; #加入fastcgi_params,如下面的fastcgi_param參數
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
-
php
shell> cd /usr/local/php #進入編譯安裝的php目錄
shell> cp etc/php-fpm.d/www.conf{.default,} #拷貝默認的的配置文件,相當於執行了cp etc/php-fpm.d/www.conf.default etc/php-fpm.d/www.conf,配置包括了php解析器的IP和端口,用戶和用戶組等配置
shell> cp etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf #拷貝默認的php-fpm的啟動配置文件
shell> groupadd www-data #創建www-data用戶組
shell> useradd -g www-data -s /sbin/nologin www-data #創建www-data用戶,屬於www-data用戶組(-g --group),類型為不可登錄(-s --shell)
再修改php www的用戶和用戶組,設置為www-data,www.conf
文件:
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
user = www-data
group = www-data
再修改php-fpm的配置文件,設置啟動的進程pid文件存儲位置,后面設置服務需要用到進程運行IDpid
,php-fpm.conf
文件:
[global]
; Pid file
; Note: the default prefix is /usr/local/php/var
; Default Value: none
pid = /usr/local/php/var/run/php-fpm.pid
3. 測試
編寫測試的php頁面
shell> rm /usr/local/nginx/html/index.html #刪除nginx默認的首頁文件
shell> echo "<?php phpinfo(); ?>" >> /usr/local/nginx/html/index.php #創建測試文件,使用php的信息函數顯示信息
啟動php和nginx
shell> /usr/local/php/sbin/php-fpm #啟動php-fpm
shell> /usr/local/nginx/sbin/nginx #啟動nginx
接着,就可以瀏覽器輸入nginx的服務器ip進行http訪問了,我的這里是輸入http://172.16.11.141:80
,如下圖所示:
至此,nginx+php的安裝和測試成功。
4. 設置Nginx、PHP開機自啟
-
nginx
在centos7中,服務都是使用systemdctl
命令而不是service
了,即使是使用service
命令其實也是鏈接到systemdctl
命令,關於systemd
的介紹可以參考阮一峰老師的:Systemd 入門教程:命令篇
shell> cd /lib/systemd/system/ #切換目錄到關於系統進程的目錄
shell> vim nginx.service #在目錄下新建nginx.service文件,填入以下內容
nginx.service
文件
[Unit]
Description=nginx service
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[Unit]
塊是這個服務單元的描述;[Service]
塊是服務的配置,如啟動命令,停止命令,其中的Type=forking
表示后台執行;[Install]
塊是安裝的配置,multi-user.target
是運行級別為3,Linux有0-6
歌運行級別。最后,執行命令執行開啟開機自啟:
shell> systemctl enalbe nginx.service #開啟nginx開機自啟服務,關閉對應dsiable
關於systemctl的詳細使用介紹可以查閱這篇文章:How To Use Systemctl to Manage Systemd Services and Units
-
php
php的服務也差不多,不過php在5.3.3
以后的版本不再支持 (start|stop|reload)
等命令,需要使用Linux的信號量:INT
,USR1
,USR2
,QUIT
等。
shell> cd /lib/systemd/system/ #切換目錄到關於系統進程的目錄
shell> vim php-fpm.service #在multi-user.target.wants目錄下新建php-fpm.service文件,填入以下內容
php-fpm
文件:
[Unit]
Description=php-fpm service
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/php/sbin/php-fpm
ExecReload=kill -USR2 $(cat /usr/local/php/var/run/php-fpm.pid)
ExecStop=kill -INT $(cat /usr/local/php/var/run/php-fpm.pid)
PrivateTmp=true
[Install]
WantedBy=multi-user.target
關於Linux的信號量,可以查閱這篇文章介紹:Signals in Linux ,最后開啟php-fpm服務:
shell> systemctl enable php-fpm.service #開啟php-fpm開機自啟服務,關閉對應dsiable
5. 最后
最后重啟進行測試:
shell> reboot #重啟
shell> ps aux | grep php-fpm #查看php-fpm相關進程是否運行
shell> ps aux | grep nginx #查看nginx相關進程是否運行