WAMP (Windows + Apache + MySQL + PHP) 是 Windows 系統下常使用的組合,但因幾個原因不再使用 Apache了。
1. Apache 愈來愈笨重,且連線數都過200時就卡卡的,而 Nginx 效能極佳,就算有1000 多個連線都極為穩定。
2. Nginx 具有反向代理伺服器的功能,但 Apache 沒有。
3. WAMP 所搭配的 MySQL 都是較舊的版本,若又自行安裝新版的 MySQL,常讓使用者在調配 port 時搞的暈頭轉向,因此不再使用 WAMP 了,而是自行安裝新版的 MySQL。
WNMP 為 Windows + Nginx + MySQL + PHP 的縮寫。此篇介紹在 Windows 下手動安裝 Nginx,再手動安裝 PHP,至於手動安裝 MysQL 請參照 http://mahaljsp.asuscomm.com/mysql_win_install/ 。
下載Nginx
https://nginx.org/en/download.html,解壓縮後,將 nginx-1.25.2 複製到 server 目錄下,並改名為 nginx
啟動與停止
進入 dos 命令提示視窗,執行如下指令
d:
cd \server\nginx
start nginx #手動啟動 nginx
nginx -s stop #手動停止 nginx
測試
在瀏覽器網址輸入 http://localhost 即可看到網頁。
開機自啟 Nginx
上述 “nginx start” 是手動啟動 Nginx,每次電腦重新開機都要手動輸入一遍,是很煩人的。
要讓 Nginx 開機後自動啟動,需使用 winsw 將 Nginx 移到系統的背景服務。請到 http://repo.jenkins-ci.org/releases/com/sun/winsw/winsw/2.9.0/ 選擇 winsw-2.9.0-bin.exe 。安裝時要求下載 .netFramework 3.5,請選擇下載並安裝。
將 winsw-2.9.0-bin.exe copy 到 nginx 目錄下,並改名為 winsw.exe
在 nginx 下新增 winsw.xml,內容如下
<?xml version="1.0" encoding="UTF-8" ?>
<service>
<id>Nginx</id>
<name>Nginx</name>
<description>本服務用於加載 Nginx 服務</description>
<logpath>C:\Users\thomas\Downloads\nginx\logs</logpath>
<executable>nginx.exe</executable>
<stopexecutable>nginx.exe</stopexecutable>
<stopargument>-s</stopargument>
<stopargument>stop</stopargument>
<logmode>rotate</logmode>
</service>
安裝到背景服務
系統管理員身份開啟 dos 視窗,使用如下指令安裝到背景服務
安裝到背景服務
winsw.exe install
移除背景服務
winsw.exe uninstall
背景服務開啟及關閉
安裝到背景服數後,要重新開機才會自動啟動。若不想重新開機而是要手動開啟或關閉背景服務,需使用系統管理員身份開啟 dos 視窗,執行如下指令
net start nginx #開啟背景服務
net stop nginx #關閉背景服務
下載php
https://windows.php.net/download/ 選最新版本 x64 Thread Safe的版本,解壓縮到 d:\server,並將目錄改為 php。
環境變數 path 新增 d:\server\php
php 設定
將 php.ini-production copy 成 php.ini, 然後在最後面新增如下設定
extension_dir = "d:\server\php\ext" extension=php_mysqli.dll extension=php_openssl.dll extension=php_mbstring.dll extension=php_pdo_mysql.dll max_execution_time = 300 memory_limit = 512M post_max_size = 20M upload_max_filesize = 20M date.timezone = Asia/Taipei
todo
手動啟動 php
請在 dos 下執行如下指令
d:
cd \server\php
php-cgi.exe -b 127.0.0.1:9000
執行後游標就會消失不能再輸入任何指令,這並不是掛掉,而是在背景開始執行了。
防火牆
雖然 php 是使用 127.0.0.1:9000,但防火牆還是要開啟 9000 port。否則會出現 “403 forbidden” 的錯誤
自動啟動 php
使用Windows 系統管理工具裏的工作排程建立基本工作,
名稱 : php
程式碼 : d:\server\php\php-cgi.exe
新增引數 : “-b 127.0.0.1:9000”
最後在 php 點二下,內容裏的 “不論使用者登入與否均執行” 請打勾。
Nginx 設定
d:\server\nginx\conf\nginx.conf 修改成如下
worker_processes 8; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; client_max_body_size 20m; server { listen 80; server_name ~.*; root d:/server/web; add_header X-Frame-Options SAMEORIGIN;#禁止網頁被內崁 index index.php; location ~* \.(ico|css|js|gif|jpe?g|png|ogg|ogv|svg|svgz|eot|otf|woff)(\?.+)?$ { expires max; log_not_found off; } location / { try_files $uri $uri/ /index.php?$args; } location ~* \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(.*)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
記得在 d:\server 下新增 web 目錄,此為網頁根目錄。然後使用系統管理員身份開啟 dos,執行如下指令
net stop nginx
net start nginx
測試
在 d:\server\web 新增 info.php,代碼如下
<?php
phpinfo();
?>
然後在瀏覽器輸入 http://localhost/info.php 即可看到網頁