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;
}
}
}