全新centos系統下源碼安裝php+nginx

前言

安裝軟件列表

  1. nginx-1.13.9
  2. php-7.2.3

操做系統

阿里雲esc centos 7.4 64位

前提條件

yum install -y gcc gcc-c++ openssl openssl-devel

安裝這些是應爲在編譯安裝的時候咱們須要它們。php

安裝nginx

首先咱們得去nginx官網下載源碼包以及查看文檔。編譯文檔須要仔細查看,先簡單瞭解一下配置參數。html

nginx 配置參數
  • --prefix=path 定義一個目錄,存放服務器上的文件 ,也就是nginx的安裝目錄。默認使用/usr/local/nginx
  • --sbin-path=path 設置nginx的可執行文件的路徑,默認爲prefix/sbin/nginx
  • --conf-path=path 設置在nginx.conf配置文件的路徑。nginx容許使用不一樣的配置文件啓動,經過命令行中的-c選項。默認爲prefix/conf/nginx.conf
  • --pid-path=path 設置nginx.pid文件,將存儲的主進程的進程號。安裝完成後,能夠隨時改變的文件名 , 在nginx.conf配置文件中使用 PID指令。默認狀況下,文件名 爲prefix/logs/nginx.pid
  • --error-log-path=path 設置主錯誤,警告,和診斷文件的名稱。安裝完成後,能夠隨時改變的文件名 ,在nginx.conf配置文件中 使用 的error_log指令。默認狀況下,文件名 爲prefix/logs/error.log
  • --http-log-path=path 設置主請求的HTTP服務器的日誌文件的名稱。安裝完成後,能夠隨時改變的文件名 ,在nginx.conf配置文件中 使用 的access_log指令。默認狀況下,文件名 爲prefix/logs/access.log
  • --build=name 設置一個可選的nginx構建名稱。
  • --user=name 設置nginx工做進程的用戶。安裝完成後,能夠隨時更改的名稱在nginx.conf配置文件中 使用的 user指令。默認的用戶名是nobody。
  • --group=name 設置nginx工做進程的用戶組。安裝完成後,能夠隨時更改的名稱在nginx.conf配置文件中 使用的 user指令。默認的爲非特權用戶。
  • --with-select_module --without-select_module 啓用或禁用構建一個模塊來容許服務器使用select()方法。該模塊將自動創建,若是平臺不支持的kqueue,epoll,rtsig或/dev/poll。
  • --with-poll_module --without-poll_module 啓用或禁用構建一個模塊來容許服務器使用poll()方法。該模塊將自動創建,若是平臺不支持的kqueue,epoll,rtsig或/dev/poll。
  • --without-http_gzip_module — 不編譯壓縮的HTTP服務器的響應模塊。編譯並運行此模塊須要zlib庫。
  • --without-http_rewrite_module 不編譯重寫模塊。編譯並運行此模塊須要PCRE庫支持。
  • --without-http_proxy_module — 不編譯http_proxy模塊。
  • --with-http_ssl_module — 使用https協議模塊。默認狀況下,該模塊沒有被構建。創建並運行此模塊的OpenSSL庫是必需的。
  • --with-pcre=path — 設置PCRE庫的源碼路徑。PCRE庫的源碼(版本4.4 - 8.41)須要從PCRE網站下載並解壓。其他的工做是Nginx的 ./configure 和 make 來完成。正則表達式使用在location指令和 ngx_http_rewrite_module 模塊中。
  • --with-pcre-jit —編譯PCRE包含「just-in-time compilation」(1.1.12中, pcre_jit指令)。
  • --with-zlib=path —設置的zlib庫的源碼路徑。要下載從 zlib(版本1.1.3 - 1.2.11)的並解壓。其他的工做是Nginx的./ configure和make完成。ngx_http_gzip_module模塊須要使用zlib 。
  • --with-cc-opt=parameters — 設置額外的參數將被添加到CFLAGS變量。例如,當你在FreeBSD上使用PCRE庫時須要使用:--with-cc-opt="-I /usr/local/include。.如須要須要增長 select()支持的文件數量:--with-cc-opt="-D FD_SETSIZE=2048".
  • --with-ld-opt=parameters —設置附加的參數,將用於在連接期間。例如,當在FreeBSD下使用該系統的PCRE庫,應指定:--with-ld-opt="-L /usr/local/lib"

翻譯大部分來源於網絡,這裏不展開說明nginx各個編譯參數的含義,先完成安裝,畢竟以後咱們能夠經過配置文件或者從新編譯實現功能上的需求。下面是官方文檔的編譯參數示例,這些參數必須在同一行輸入(別用回車換行,那樣就開始編譯了o(╥﹏╥)o)nginx

./configure
    --sbin-path=/usr/local/nginx/nginx
    --conf-path=/usr/local/nginx/nginx.conf
    --pid-path=/usr/local/nginx/nginx.pid
    --with-http_ssl_module
    --with-pcre=../pcre-8.41
    --with-zlib=../zlib-1.2.11

路徑我以爲不必配置,默認的就很好,--with-http_ssl_module 是對https訪問的支持,顯然咱們須要它,編譯這個模塊須要OpenSSL的支持,咱們在前提條件中已經用yum安裝了OpenSSL--with-pcre是對ngx_http_rewrite_module中正則表達式的支持,咱們也須要它;--with-zlibngx_http_gzip_module須要的,咱們最好包含它,ngx_http_gzip_module能夠必定程度上減小服務器負擔,固然不編譯進來也沒事,之後須要能夠再從新編譯進來。c++

編譯安裝 nginx
//下載nginx源碼包
wget http://nginx.org/download/nginx-1.13.9.tar.gz
//下載pcre源碼包
wget https://ftp.pcre.org/pub/pcre/pcre-8.41.tar.gz
//下載zlib源碼包
wget http://www.zlib.net/zlib-1.2.11.tar.gz
//解壓
tar zxvf nginx-1.13.9.tar.gz
tar zxvf pcre-8.41.tar.gz
tar zxvf zlib-1.2.11.tar.gz
//進入nginx目錄
cd nginx-1.13.9
//配置, -with-pcre=../pcre-8.41 --with-zlib=../zlib-1.2.11 這麼寫是由於我把zlib和pcre都放在nginx源碼包同一級目錄下
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-pcre=../pcre-8.41 --with-zlib=../zlib-1.2.11

//配置成功以後,編譯並安裝
make && make install

若是配置或者編譯時出現錯誤,請百度或者google解決,好比,好比在最小化安裝的 centos 虛擬機中操做,tar 命令都沒有安裝,那麼報tar命令不存在時咱們先得安裝 tar 命令。正則表達式

測試是否安裝成功

啓動nginx後端

/usr/local/nginx/sbin/nginx

訪問 ip 若是出現下圖,則安裝成功centos

圖片描述

安裝php

前往php下載頁面找到須要安裝的php版本,這裏咱們安裝最新的穩定版本php7.2.3。官方文檔沒有給出配置參數列表,咱們可使用./configure --help查看。服務器

下載、配置及編譯安裝php
//下載php的安裝文件
wget http://cn2.php.net/distributions/php-7.2.3.tar.gz
//解壓
tar zxvf php-7.2.3.tar.gz
//進入解壓後的目錄
cd php-7.2.3
//配置安裝參數
./configure --enable-fpm --prefix=/usr/local/php
//編譯安裝
make && make install

在運行configure的時候或許會報以下錯誤網絡

configure: error: libxml2 not found. Please check your libxml2 installation

這是由於缺乏libxml庫,yum安裝一下就好php7

yum install -y libxml2 libxml2-devel

咱們這裏就簡單的安裝了php,只帶了一個參數--enable-fpm,可是實際咱們也許會須要帶更多的參數,這些咱們能夠經過從新走一遍安裝流程來實現,值得一提的是,在./configure執行成功以後會在當前目錄下留下config.nice 文件,後續若是從新配置,能夠在這個基礎上運行,好比咱們要安裝pcntl擴展,能夠這樣執行./config.nice --enable-pcntl

完成安裝以後的操做

php配置文件,因爲在配置時咱們並無指定php.ini的加載位置,默認在安裝php安裝目錄的lib目錄下,因此我 們移動配置文件到 /usr/local/php/lib 目錄下。

cp php.ini-development /usr/local/php/lib/php.ini

在/usr/local/php/etc/php-fpm.conf 最後一行能夠看到 include=/usr/local/php/etc/php-fpm.d/*.conf,因此須要執行如下步驟。

cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf

須要着重提醒的是,若是文件不存在,則阻止 Nginx 將請求發送到後端的 PHP-FPM 模塊, 以免遭受惡意腳本注入的攻擊。將 php.ini 文件中的配置項 cgi.fix_pathinfo 設置爲 0 。【官方文檔提出】

啓動php-fpm
/usr/local/php/sbin/php-fpm
修改 nginx配置以支持php應用

修改默認的 location 塊,使其支持 .php 文件:

location / {
    root   html;
    index  index.php index.html index.htm;
}

下一步配置來保證對於 .php 文件的請求將被傳送到後端的 PHP-FPM 模塊, 取消默認的 PHP 配置塊的註釋,並修改成下面的內容:

location ~* \.php$ {
    fastcgi_index   index.php;
    fastcgi_pass    127.0.0.1:9000;
    include         fastcgi_params;
    fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
}

重啓nginx使配置生效

/usr/local/nginx/sbin/nginx -s stop
/usr/local/nginx/sbin/nginx

建立測試文件

echo "<?php phpinfo(); ?>" >> /usr/local/nginx/html/index.php
相關文章
相關標籤/搜索