1. 程式人生 > >nginx 的 php 開發環境部署

nginx 的 php 開發環境部署

今天來做一下 nginx 的分享

準備工作

首先是編譯需要的一些東西

gcc-c++

libtool

gzip 模組需要 zlib 庫

rewrite 模組需要 pcre 庫

ssl 功能需要 openssl 庫

安裝依賴

直接用 yum 安裝就行了,不用自己編譯,節省很多時間,也避免了一些不必要的錯誤

下面依賴,根據實際情況自己安裝需要的

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

編譯安裝

然後編譯安裝

./configure --prefix=/usr/local/nginx \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-http_realip_module \

make
make install

許可權不夠的話自己想辦法。。sudo 一下

常用編譯選項

–prefix=PATH: 指定nginx的安裝目錄。預設 /usr/local/nginx

–conf-path=PATH: 設定nginx.conf配置檔案的路徑。nginx允許使用不同的配置檔案啟動,通過命令列中的-c選項。預設為prefix/conf/nginx.conf

–user=name: 設定nginx工作程序的使用者。安裝完成後,可以隨時在nginx.conf配置檔案更改user指令。預設的使用者名稱是nobody。–group=name類似

–with-http_ssl_module: 使用https協議模組。預設情況下,該模組沒有被構建。前提是openssl與openssl-devel已安裝

–with-http_stub_status_module: 用來監控 Nginx 的當前狀態

–with-http_gzip_static_module: 是針對 nginx serve 的靜態檔案,需要編譯進去才能有

–with-http_realip_module: 通過這個模組允許我們改變客戶端請求頭中客戶端IP地址值(例如X-Real-IP 或 X-Forwarded-For),意義在於能夠使得後臺伺服器記錄原始客戶端的IP地址

–with-pcre: 設定PCRE庫的原始碼路徑,如果已通過yum方式安裝,使用–with-pcre自動找到庫檔案。使用–with-pcre=PATH時,需要從PCRE網站下載pcre庫的原始碼(版本4.4 - 8.30)並解壓,剩下的就交給Nginx的./configure和make來完成。perl正則表示式使用在location指令和 ngx_http_rewrite_module模組中。

–with-zlib=PATH: 指定 zlib(版本1.1.3 - 1.2.5)的原始碼解壓目錄。在預設就啟用的網路傳輸壓縮模組ngx_http_gzip_module時需要使用zlib 。

–add-module=PATH: 新增第三方外部模組,如nginx-sticky-module-ng或快取模組。每次新增新的模組都要重新編譯(Tengine可以在新加入module時無需重新編譯)

常用操作

啟動關閉 nginx 等常用操作

# 檢查配置檔案是否正確
/usr/local/nginx/sbin/nginx -t

# 檢視編譯選項
/usr/local/nginx/sbin/nginx -V

# 啟動
/usr/local/nginx/sbin/nginx  # 預設配置檔案 conf/nginx.conf,-c 指定

#關閉
/usr/local/nginx/sbin/nginx -s stop
# or
pkill nginx

# 重啟,不會改變啟動時指定的配置檔案
/usr/local/nginx/sbin/nginx -s reload
# 或者
kill -HUP `cat /usr/local/nginx-1.6/logs/nginx.pid`

# 也可以將 nginx 作為系統服務管理,下載 nginx 到/etc/init.d/,修改路徑和可執行許可權

# service nginx {start|stop|status|restart|reload|configtest}

解析 php

需要 php-fpm 的支援

直接使用自帶的 php-fpm

如果沒有,那重新編譯 PHP,在原有的編譯資訊後加上 --enable-fpm

檢視原本的編譯資訊

php -i | grep Configure

加上 --enable-fpm 選項進行重新編譯

配置 php-fpm

    #複製一份配置檔案
    sudo cp /usr/local/php7/etc/php-fpm.conf.default.conf  php-fpm.conf

    #複製一份使用者配置檔案,使用者名稱是配置 php 時指定的
    sudo cp /usr/local/php7/etc/php-fpm.d/www.conf.default www.conf

    #啟動 php-fpm,mac 必須要以 root 使用者啟動,-R 引數表示 --allow-to-run-as-root
    sudo /usr/local/php7/sbin/php-fpm -R

    #檢視一下php-fpm是否啟動成功
    ps aux | grep php-fpm

    # php-fpm 的預設埠號是 9000
    netstat -ant | grep 90000

nginx 整合 php-fpm

location ~ \.php$ {
    root           /data/home/arnoliu/www/developers.e.qq.com/web;
    fastcgi_pass   127.0.0.1:9001;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /data/home/arnoliu/www/developers.e.qq.com/web$fastcgi_script_name;
    include        fastcgi_params;
}

nginx 配置

nginx.conf 配置檔案

nginx 配置檔案主要分成四部分:

  • main:(全域性設定)其他部分的會繼承自 main
  • server:(主機設定)主要用於指定虛擬主機域名、IP 和埠
  • location:(URL 路由)用於匹配路由資訊
  • upstream:(主要為反向代理、負載均衡相關配置)upstream 主要用於設定一系列的後端伺服器,設定反向代理及後端伺服器的負載均衡

server 繼承 main,location 繼承 server

upstream 既不會繼承指令也不會被繼承,它有自己的特殊指令

我的配置

worker_processes  8;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    access_log  logs/access.log;

    sendfile        on;
    keepalive_timeout  60;

    tcp_nopush on;
    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 text/css text/javascript application/json application/javascript application/x-javascript application/xml;
    gzip_vary on;

    server {
        listen       80;
        server_name  example.qq.com;

        root /data/home/arnoliu/www/example/web;
        charset utf-8;

        location / {
            root /data/home/arnoliu/www/example/web;
            index index.php index.html index.htm;
        }

        location ~ \.php$ {
            root          /data/home/arnoliu/www/example/web;
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME  /data/home/arnoliu/www/example/web$fastcgi_script_name;
            include       fastcgi_params;
        }
    }
}