nginx 是一款具備高負載能力的 web 服務器,也是 LNMP 架構的主要角色之一。如今愈來愈多的開發者選擇 nginx 做爲 php 的好搭檔,替代 apache 的位置。下面我以 Mac 系統爲例,介紹下 nginx 的配置php
打開 nginx.conf,找到 http 下的 server,前幾行的內容分別是:html
listen 8080; #監聽端口 server_name localhost; #本地域名 root /usr/local/var/www; #項目根目錄
nginx 默認監聽8080
端口,你能夠改爲 80 端口。默認項目根目錄也能夠更改。不過更改以後要從新載入配置文件才能生效:node
sudo nginx -s reload
注意:若是你不喜歡localhost
,你想要一個個性的本地域名,好比www.test.com
,首先要編輯 hosts 文件:nginx
sudo vim /etc/hosts
添加一條:web
127.0.0.1 www.test.com
而後修改 nginx.conf:apache
server_name www.test.com
總之 nginx.conf 中設置的域名,必須在 hosts 文件中存在!vim
在咱們開發項目的時候,通常會有隱藏入口文件的需求。依然是在 http 下的 server,咱們找到location /
,在大括號內作修改。切記ci
框架和tp
框架的寫法稍有不一樣,具體以下:segmentfault
location / { index index.php index.html index.htm; if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?$1 last; #ci框架寫法 #rewrite ^/(.*)$ /index.php?s=/$1 last; #tp框架寫法 break; } }
若是你用的是tp5
, 入口文件在 public 目錄下,可是你不想在URL中寫localhost/public/
訪問入口文件,你想直接經過localhost/
訪問,你能夠這樣寫:服務器
rewrite ^/(.*)$ /public/index.php?s=/$1 last;
其實隱藏入口文件就是 nginx 作了下路由,看懂它的正則,其實不難理解。架構
若是要 nginx 正常解析 php,首先要在安裝好 php 以後,啓動 php-fpm。啓動方法:
sudo php-fpm -D
上一步完成以後,接下來仍是要修改 nginx.conf。server 下找到location ~ \.php$
這一行,包括它後面{}
中的內容,去掉註釋,也就是去掉前面的#
號,修改爲這樣:
location ~ \.php(\/.*)*$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_split_path_info ^((?U).+\.php)(/?.+)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; }
如圖:
從新載入配置文件。此時 nginx 就能夠配合 php-fpm 正確解析 PHP 了。
前面咱們修改配置文件的代碼位置,都是在 http 下的 server 裏。其實一個 server
就至關於一個站點。nginx.conf 下 http 模塊默認開啓一個 server,就是隻有一個站點。若是咱們要多站點,就須要添加多個 server。
如今咱們要添加一個站點,假設這個站點的域名是 www.test2.com
, 可是 server 不寫在 nginx.conf 裏。nginx 爲咱們提供了存放多站點配置文件的目錄,咱們切換到這個目錄:
cd /usr/local/etc/nginx/servers/
而後新建配置文件:
vim www.test2.com.conf
裏邊寫一個 server:
server { listen 80; server_name www.test2.com; index index.html index.php; root /usr/local/var/test2; location / { index index.php index.html; rewrite ^/(.*)$ /public/index.php?s=/$1 last; break; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_split_path_info ^((?U).+\.php)(/?.+)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; } }
保存退出,從新載入配置文件。最後在 hosts 中添加:
127.0.0.1 www.test2.com
此時,www.test2.com
就能夠訪問到你的新項目目錄 /usr/local/var/test2
下了!
個人應用場景是這樣的。假設個人服務器上存放着一個 node 項目,node 佔用着80
端口,能夠正常運行。可是我想再放一個 php 項目,此時這個php項目就不能是80端口了。若是想 node 項目和 php 項目均適用80端口,則須要利用 nginx 作反向代理設置。
解決方案是,node 項目設置成非 80 端口,好比3000
,nginx 添加一個站點,假設是www.test3.com
,訪問 80 端口,代理到 3000 端口便可。
設置方法如上一節添加新站點:
cd /usr/local/etc/nginx/servers/
而後新建配置文件:
vim www.test3.com.conf
寫入一個 server:
server { listen 80; server_name www.test3.com; location / { proxy_pass http://127.0.0.1:3000; } }
訪問 www.test3.com,就能夠訪問到 node 項目了!