一、伺服器環境
主機 | 作業系統 | Nginx版本 | php版本 | lumen版本 |
---|---|---|---|---|
騰訊雲主機 | Centos 7.2 64位 | 1.14.0 | 7.1.17 | 5.6 |
二、安裝nginx
1、 安裝 nginx 需要先将官網下載下傳的源碼進行編譯,編譯依賴 gcc 環境,如果沒有 gcc 環境,則需要安裝:
2、 安裝 PCRE (Perl Compatible Regular Expressions)庫,PCRE是一個正規表達式庫,nginx 的 http 子產品使用 pcre 來解析正規表達式,是以需要在 linux 上安裝 pcre 庫,pcre-devel 是使用 pcre 開發的一個二次開發庫。nginx也需要此庫。
3、安裝 zlib 庫 —— zlib 庫提供了很多種壓縮和解壓縮的方式, nginx 使用 zlib 對 http 包的内容進行 gzip ,是以需要安裝 zlib 庫:
4、安裝OpenSSL庫。OpenSSL 是一個強大的安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及 SSL 協定,并提供豐富的應用程式供測試或其它目的使用。Nginx 不僅支援 http 協定,還支援 https(即在ssl協定上傳輸http),是以需要安裝 OpenSSL 庫:
5、安裝Nginx到目錄
/usr/local/services
:
- 官網下載下傳tar.gz安裝包
- 使用wget指令下載下傳:
wget -c https://nginx.org/download/nginx-1.14.0.tar.gz
- 進入解壓後目錄,編譯安裝:
&./configure --prefix=/usr/local/services/nginx
&make
make install
- 啟動停止nginx:
-
—— 啟動./nginx
-
—— 強制停掉nginx程序./nginx -s stop
-
—— 待nginx程序處理完任務後停止./nginx -s quit
-
—— 重新加載配置./nginx -s reload
-
然後在浏覽器裡通路 80 端口,如果可以看到如下頁面,表示 Nginx 安裝成功:
三、安裝php-fpm
PHP-FPM(FastCGI Process Manager:FastCGI程序管理器),是 FastCGI 的實作,并提供了程序管理的功能。程序包含 master 程序和 worker 程序兩種程序。
- master 程序隻有一個,負責監聽端口,接收來自 Web Server 的請求,
- worker 程序則一般有多個(具體數量根據實際需要配置),每個程序内部都嵌入了一個 PHP 解釋器,是 PHP 代碼真正執行的地方。
PHP從 5.3.3 版本開始已經講 php-fpm 納入php源碼核心了,不再是第三方的包,是以不需要另外下載下傳了。隻需要在編譯 php 的時候帶上
--enable-fpm
就可以了。
① 擷取tar.gz安裝包
② 進入解壓後目錄:
./configure --prefix=/usr/local/services/php7 \
--with-openssl \
--with-pcre-regex \
--with-kerberos \
--with-libdir=lib \
--with-libxml-dir \
--with-mysqli=shared,mysqlnd \
--with-pdo-mysql=shared,mysqlnd \
--with-pdo-sqlite \
--with-gd \
--with-iconv \
--with-zlib \
--with-xmlrpc \
--with-xsl \
--with-pear \
--with-gettext \
--with-curl \
--with-png-dir \
--with-jpeg-dir \
--with-freetype-dir \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--enable-mysqlnd \
--enable-zip \
--enable-inline-optimization \
--enable-shared \
--enable-libxml \
--enable-xml \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-mbregex \
--enable-mbstring \
--enable-ftp \
--enable-gd-native-ttf \
--enable-pcntl \
--enable-sockets \
--enable-soap \
--enable-session \
--enable-opcache \
--enable-fpm \
--enable-maintainer-zts \
--enable-fileinfo
執行
./configure
時發現有些庫沒有裝,于是yum安裝了一下庫:
yum install libxml2-devel // error: libxml2 not found
yum install curl-devel // error: cURL version 7.10.5 or later is required to compile php with cURL support
yum -y install libjpeg-devel // error: jpeglib.h not found.
yum -y install libpng-devel // error: png.h not found.
yum install freetype freetype-devel // error: freetype-config not found.
yum install libxslt libxslt-devel // error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution
配置成功以後,執行
make && make install
安裝。
③ 配置php
修改 php.ini 的内容:
######避免PHP資訊暴露在http頭中
expose_php = Off
######避免暴露php調用mysql的錯誤資訊
display_errors = Off
######在關閉display_errors後開啟PHP錯誤日志
log_errors = On
######錯誤日志路徑
error_log = /usr/local/services/php7/log/php_errors.log
######設定PHP的擴充庫路徑
extension_dir = "/usr/local/services/php7/lib/php/extensions/no-debug-zts-20160303/"
######設定PHP的一些動态庫
zend_extension = opcache.so
extension=amqp.so
extension=redis.so
extension=mongodb.so
extension=swoole.so
######設定PHP的時區
date.timezone = Asia/Shanghai
######開啟opcache
[opcache]
opcache.enable=
opcache.enable_cli=
④ 配置 php-fpm
修改 php-fpm.conf 的内容:
######設定錯誤日志的路徑
error_log = /usr/local/php7/log/php-fpm.log
######設定日志級别
log_level = error
######引入www.conf檔案中的配置
include=/usr/local/php7/etc/php-fpm.d/*.conf
⑤ 配置www.conf
www.conf
是 php-fpm 程序服務的擴充配置檔案
修改 www.conf 的内容:
######設定使用者和使用者組
user = www
group = www
如果不存在則建立使用者&使用者組
groupadd www
useradd -g www www
⑥ 啟動php-fpm
可以檢視程序或者9000端口的監聽情況。
四、安裝lumen
Lumen
是
Laravel
架構的精簡版,可以快速的開發API接口服務。
1、安裝composer
如果提示找不到php,請建軟鍊:
ln -s /usr/local/services/php7/bin/php /usr/bin/php
2、建立lumen項目
如果我們要在
/data/project/
目錄下建項目,進入該目錄并切換到
www
使用者(不能用root使用者執行composer指令),執行:
執行成功以後,就在目前目錄下建立了一個叫demo的項目。
3、寫一個最簡單的接口
在檔案
/data/project/demo/routes/web.php
裡添加一個路由:
<?php
$router->get('/', function () use ($router) {
return $router->app->version();
});
$router->get('getHelloWorld', '[email protected]'); // 添加一個接口
在檔案
/data/project/demo/app/Http/Controllers/ExampleController.php
裡添加一個
getHelloWorld
方法:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ExampleController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
}
// 添加一個方法
public function getHelloWorld(Request $request) {
return "hello, lumen";
}
}
到這裡接口就開發完成了
五、配置請求轉發
1、nginx轉發配置
假設我們指定請求的域名為
api.lumen.com
,則當 nginx 收到通過該域名發來的HTTP請求時,将請求轉發到後端的
php-fpm
子產品。
在
/usr/local/services/nginx/conf
配置目錄下建立一個配置檔案
api.lumen.com.conf
,内容如下:
server {
listen ;
server_name api.lumen.com;
root /data/project/demo/public;
index index.php;
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Headers' 'X_forwarded-for,Content-Type';
add_header 'Access-Control-Allow-Origin' '$http_origin';
add_header 'Access-Control-Allow-Methods' 'GET,POST';
location / {
if ($request_method = 'OPTIONS') {
return ;
}
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php{
try_files $uri /index.php =;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass :;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi.conf;
}
}
然後在
nginx.conf
的最後把上面的配置檔案 include 進去:
http {
...
include api.lumen.com.conf;
}
重新加載 nginx 配置:
./nginx -s reload
2、測試接口
在
/etc/hosts
裡添加:
請求接口:
[root@VM_104_153_centos conf]# curl "http://api.lumen.com/getHelloWorld"
hello, lumen
成功傳回。