[TOC] #### 1. 前言 --- 環(huán)境介紹: mac book pro m1 2020 本文記錄使用 brew 安裝 nginx 配合PHP工作 #### 2. 安裝PHP --- 查看有哪些PHP版本可以安裝 ``` brew search php ``` 安裝php7.2 ``` brew install php@7.2 ``` 切換 PHP 版本 ``` brew-php-switcher 7.2 ``` #### 3. nginx的安裝及基本配置 --- ``` brew install nginx ``` 一、`location /`: 因?yàn)樗械恼?qǐng)求都是以`/`開(kāi)頭的,所以下面的配置相當(dāng)于匹配任意的URL ``` location / { root html; index index.html index.htm; } ``` root: 站點(diǎn)根目錄, 相當(dāng)于`Apahce`的 `DocumentRoot` ``` DocumentRoot "/Users/liang/Sites" ``` index: 默認(rèn)訪問(wèn)的文件, 相當(dāng)于`Apahce`的 `DirectoryIndex` ``` <IfModule dir_module> DirectoryIndex index.html index.php </IfModule> ``` **二、`location ~ \.php$`: 匹配以.php結(jié)尾的文件** fastcgi_param: 將值中的 `/scripts` 改為 `$document_root` fastcgi_pass: 如果請(qǐng)求時(shí)php文件,那么nginx會(huì)把請(qǐng)求轉(zhuǎn)發(fā)到 `127.0.0.1:9000`, 其中 9000 是php-fpm的端口 ``` location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi_params; } ``` 查看 `php-fpm.d` 目錄下的 配置文件 `www.conf` ``` cat /opt/homebrew/etc/php/7.2/php-fpm.d/www.conf ``` 進(jìn)入 vim 模式,搜索關(guān)鍵詞 `9000`, 就會(huì)發(fā)現(xiàn)確實(shí)可以找到 `listen = 127.0.0.1:9000` ![](https://img.itqaq.com/art/content/77b0b1a7155e3eb16751c379675515cf.png) #### 4. nginx的URL重寫 --- 以TP6.0舉例,訪問(wèn) index控制器的 hello 方法,用 `/index/hello` 訪問(wèn)提示 `404` 因?yàn)?nginx 默認(rèn)是不支持pathinfo方式訪問(wèn)的,如果要訪問(wèn)可以通過(guò) `s=/index/hello` 訪問(wèn) ``` // 訪問(wèn)提示404 http://127.0.0.1:8081/index.php/index/hello // 訪問(wèn)正常 http://127.0.0.1:8081/index.php?s=/index/hello ``` 但是可以通過(guò)修改配置文件使其支持pathinfo方式訪問(wèn),將以下代碼放入 `location /` 中即可 ``` if (!-e $request_filename) { rewrite ^/index.php(.*)$ /index.php?s=$1 last; rewrite ^(.*)$ /index.php?s=$1 last; break; } ``` ``` rewrite ^/index.php(.*)$ /index.php?s=$1 last; /index.php/index/hello 重寫為 /index.php?s=/index/hello rewrite ^(.*)$ /index.php?s=$1 last; /index/hello 重寫為 /index.php?s=/index/hello ``` 修改后的配置文件示例: ![](https://img.itqaq.com/art/content/88e354e50db977223a77012486339fa0.png) #### 5. 更高效的管理nginx配置文件(虛擬主機(jī)) ---- nginx 要友好的支持PHP項(xiàng)目,只需要去關(guān)注`server` 配置塊即可 后續(xù) nginx 上需要綁定多個(gè)項(xiàng)目,這是如何做配置呢 方案一: 在 nginx.conf 可以使用多個(gè) server 配置塊管理不同的項(xiàng)目,此時(shí)不方便管理,因?yàn)樗许?xiàng)目的配置都在一個(gè)文件中 方案二: 將方案一中的 server塊 抽離出來(lái),放到相應(yīng)的目錄下面,而 nginx 也提供了這樣一種能力 在 nginx.conf 配置文件的最下面有這樣一個(gè)配置,就是定義這個(gè)目錄的路徑 ``` include servers/*; ``` 將項(xiàng)目的 `server` 配置塊抽離出來(lái), 放到 `servers` 目錄下,一個(gè)項(xiàng)目占用一個(gè)配置文件 ![](https://img.itqaq.com/art/content/00ece395527b24500ab80c4579008845.png) #### 6. 配置web訪問(wèn)以及查看目錄文件 ---- nginx 默認(rèn)不支持像 ftp 那樣顯示文件列表 即使 localhost 指向的目錄下面有文件和目錄,訪問(wèn)時(shí)也會(huì)提示 `403 Forbidden` ![](https://img.itqaq.com/art/content/1e84d54572b89f37155f58898efc9cb2.png) 可以通過(guò)給 `location /` 配置段添加額外參數(shù)使其支持顯示目錄文件,將以下代碼放入 `location /` 中即可 ``` autoindex on; # 開(kāi)啟目錄文件列表 autoindex_localtime on; # 顯示的文件時(shí)間為文件的服務(wù)器時(shí)間 autoindex_exact_size on; # 顯示出文件的確切大小,單位是bytes,但我試的時(shí)候沒(méi)看到效果 charset utf-8,gbk; # 避免中文亂碼,使中文文件名可以正常顯示 ``` 配置示例 ``` location / { root /Users/liang/Sites; index index.html index.htm index.php; autoindex on; autoindex_localtime on; autoindex_exact_size on; charset utf-8,gbk; } ``` 配置成功 ![](https://img.itqaq.com/art/content/532ceda854cb54e2a645ff675ca328a7.png)