以前在mac上使用自帶的apache、php配置過,都是百度東拼西湊弄,都沒記錄。此次修改爲nginx環境,寫個筆記記錄一下,方便之後本身查看,也但願能借花獻佛,幫助他人。內容都是網上拼湊的,感謝網絡上各位無私奉獻的大神們。php
在經過brew安裝某些應用時須要使用到此程序進行編譯(用詞若是不許確還請你們諒解),因此爲了不安裝失敗,建議先安裝;html
xcode-select --install
複製代碼
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
複製代碼
[系統會在/usl/local/*這個目錄下,添加一系列文件]mysql
以上信息來源:nginx
命令以下git
brew install nginx
複製代碼
測試修改是否成功github
sudo nginx -t
複製代碼
啓動redis
sudo nginx
複製代碼
重啓sql
sudo nginx -s reload
複製代碼
安裝好nginx後直接運行nginx -s reload
會出現以下錯誤:數據庫
解決辦法: 運行啓動命令apache
sudo nginx
複製代碼
開機自動啓動
方法1
肯定homebrew.mxcl.nginx.plist文件存在ln -sfv /usr/local/opt/nginx/homebrew.mxcl.nginx.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist
複製代碼
方法2:
sudo brew services start nginx
複製代碼
配置主機
修改本地hosts文件
sudo vim /etc/hosts
複製代碼
添加一個127.0.0.1 localhost的指向,而後在瀏覽器輸入
localhost:8080
,進行訪問。出現下圖表面nginx已經初步配置成功了;
nginx初始端口爲8080;
修改nginx的端口
vim /usr/local/etc/nginx/nginx.conf
複製代碼
修改監聽的8080爲80便可;
server_name
即爲主機域名,這裏是localhost。你們能夠在
/etc/hosts
裏添加一個本地ip的域名指向,而後在nginx裏添加該域名,便可經過瀏覽器輸入域名地址訪問;
nginx.conf文件配置
cd /usr/local/etc/nginx
vim nginx.conf
複製代碼
修改後的nginx.conf的代碼以下
user root owner;
worker_processes 4;
error_log /usr/local/var/log/nginx/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid /usr/local/var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /usr/local/var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
include servers/*;
include vhosts/*;
}
複製代碼
nginx.conf有個備份文件,文件名nginx.conf.default
對應的access_log、error_log、pid
的具體文件位置,需提早確認是否存在;不然nginx會報錯,沒法啓動;
修改完nginx.conf
保存退出,能夠運行
sudo nginx -t
複製代碼
進行測試,檢查有無錯誤;
如此表示配置成功;
配置虛擬主機
cd /usr/local/etc/nginx
mkdir vhosts
cd vhosts
vim www.test.com.conf
複製代碼
虛擬主機代碼以下
server {
#監聽端口
listen 80;
#虛擬主機域名
server_name www.test.com;
#網站根目錄
root /Users/aaa/wroot/test;
#定義路徑下默認訪問的文件名
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
#打開目錄瀏覽功能,能夠列出整個目錄
#autoindex on;
}
access_log /usr/local/var/log/www.test.com-access.log main;
error_log /usr/local/var/log/www.test.com-error.log error;
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
複製代碼
獨立運行的二級欄目解析
之前用apache解析二級欄目,只須要在對應的目錄下添加.htaccess文件,在文件中配置規則,nginx不支持.htaccess。因此直接在對應的主機文件裏配置
location /a {
index index.php index.html;
try_files $uri $uri/ /a/index.php?query_string;
}
複製代碼
個人mac安裝的是php7.1,新homebrew安裝php的命令以下:
先安裝php擴展
brew tap homebrew/homebrew-php
複製代碼
在安裝php
brew install php@7.1
複製代碼
採用brew安裝時,無需使用sudo命令,或經過sudo 進入超級管理員模式。 如今使用次命令安裝時,會自動安裝上一些基於php的擴展;
安裝好php,配置好主機後,經過瀏覽器訪問有php代碼的頁面文件會出現以下錯誤;
根據翻查日誌發現是php-fpm配置問題;
#0: *70 kevent() reported that connect() failed (61: Connection refused) while connecting to upstream, client: 127.0.0.1, server: www.test.com, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.test.com"
複製代碼
這個錯誤是沒啓動php-fpm致使的,可是在命令終端輸入php-fpm
啓動php-fpm,一樣會出現以下錯誤
咱們先按照以下方式進行php-fpm的配置,來排除錯誤;
配置php-fpm
修改文件
sudo cp /private/etc/php-fpm.conf.default /private/etc/php-fpm.conf
複製代碼
編輯/private/etc/php-fpm.conf
文件
進入php-fpm.d
目錄
cd /private/etc/php-fpm.d
sudo cp www.conf.default www.conf
cd ..
sudo vim php-fpm.conf
複製代碼
設置pid文件的位置,我這裏放的絕對路徑。
修改完畢後,記得啓動php-fpm
命令終端直接運行
至此,nginx已經能夠正常解析php文件了,502錯誤也沒了
結果發現,頁面上phpinfo()出來的版本與php -v、php-fpm -v的版本不一致。查了資料發現
經過brew安裝php後,對應php、php-fpm的存放目錄以下:
php目錄 /usr/local/Cellar/php@7.1/版本號/bin
php-fpm目錄 /usr/local/Cellar/php@7.1/版本號/sbin
配置目錄 /usr/local/etc/php/7.1
複製代碼
mac系統自帶了php,安裝目錄位置
php /usr/bin/php
php-fpm /user/sbin/php-fpm
複製代碼
須要把系統自帶的php更換爲經過brew install php安裝的版本,
方法一:(操做相對簡單)
brew link --force php@7.1
複製代碼
使用這個方法時,結果出現了下面的提示
應該是權限問題,網上找了下解決方法$ sudo mkdir /usr/local/sbin
$ sudo chown -R whoami:admin /usr/local/sbin
$ brew link php71
複製代碼
記得把whoami換成本身當前登錄的用戶名,運行後終於不報錯了。真的淚奔啊!~~
而後按照提示運行以下命令;
echo 'export PATH="/usr/local/opt/php@7.1/bin:$PATH"' >> ~/.bash_profile
echo 'export PATH="/usr/local/opt/php@7.1/sbin:$PATH"' >> ~/.bash_profile
複製代碼
方法二:操做相對複雜
要麼把這兩個目錄刪除,或重命名,不然沒法使用brew 安裝的php,後面redis使用了軟鏈的方式,從新關聯了php,結果出現了php -v 和phpinfo()版本不一致的狀況;
cd /usr/local/bin
ln -s ../Cellar/php@7.1/7.1.26/bin/php php
複製代碼
一般brew安裝php後,會自動在/usr/local/bin
目錄下建立對php的軟鏈接,php-fpm就須要咱們手動關聯;
ln -s /usr/local/Cellar/php\@7.1/7.1.26/sbin/php-fpm /usr/local/bin/php-fpm
複製代碼
建立軟鏈接之後,關閉終端,從新進入,分別運行php -v
和php-fpm -v
看下版本是否一致
重啓php-fpm和nginx;(我直接重啓的電腦)
開機自動啓動php-fpm
建立自動啓動文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>org.phpfpm</string>
<key>RunAtLoad</key>
<true/>
<key>Program</key>
<string>/usr/local/sbin/php-fpm</string>
</dict>
</plist>
複製代碼
其中php-fpm的路徑,能夠經過whereis php-fpm
,find / -name php-fpm
,which php-fpm
查看,務必保證對應目錄下的版本,與php-fpm -v
的版本一致;
配置開機自動啓動
sudo chown messia:wheel ~/Library/LaunchAgents/org.php.php-fpm.plist
sudo chmod +x ~/Library/LaunchAgents/org.php.php-fpm.plist
launchctl load -w ~/Library/LaunchAgents/org.php.php-fpm.plist
複製代碼
檢查是否啓動成功
launchctl list | grep php
複製代碼
採用brew安裝
brew install redis
複製代碼
安裝目錄
/usr/local/bin
複製代碼
檢查版本
redis-server -v
redis-cli -v
複製代碼
後臺運行redis
brew services start redis
複製代碼
php安裝redis的擴展
採用pecl命令進行安裝; pecl命令,在使用brew 安裝php時,已經爲咱們安裝上了,這裏咱們直接使用便可。
咱們先進入php的bin目錄看下命令是否存在,對應路徑以下: cd /usr/local/Celler/php@7.1/7.1.26
這裏的7.1.26爲我經過brew install php@7.1安裝的php具體版本號,你們能夠經過ls命令查看文件夾下是否存在pecl命令
mac系統是自帶了php的,你們能夠經過php -v檢查當前的php 版本是否與本身安裝的一致,或者也能夠在 cd /usr/local/bin
目錄,使用 ls -al
查看
如若爲指向brew 安裝後的目錄,可使用以下命令,從新進行軟關聯;
cd /usr/local/bin
ln -s ../Cellar/php@7.1/7.1.26/bin/php php
ln -s ../Cellar/php@7.1/7.1.26/bin/pecl pecl
複製代碼
從新軟關聯後,記得退出客戶終端,而後在進入,運行php -v
查看版本號; 修改pecl下載目錄、緩存目錄權限,否則有可能會失敗;
sudo chown -R 本身帳號:分組 目錄
sudo chown -R messia:wheel /private/tmp/pear/
複製代碼
安裝redis的擴展依賴
pecl install igbinary
複製代碼
如今能夠安裝redis了,命令以下:
pecl install redis
複製代碼
靜靜等待安裝完成,確認模塊是否安裝成功;
php -m|grep r
複製代碼
如圖所示
在php.ini文件中確認
肯定so文件的位置 查看文件 至此redis安裝完畢啓動redis服務
redis-server
複製代碼
開機自動啓動redis命令
brew services start redis
複製代碼
檢查redis是否啓動成功
ps -ef | grep -E 'php|nginx|redis'
複製代碼
直接使用以下命令安裝mysql便可;
brew install mysql
複製代碼
設置mysql密碼,前提先要啓動mysql,不然會報錯。不過本地開發環境都沒配置密碼。
sudo mysql_secure_installation
複製代碼
mysql啓動命令
sudo mysql.server start
複製代碼
開機啓動mysql
sudo brew services start mysql
複製代碼
重啓
brew services restart mysql
複製代碼
phpMyAdmin相關配置
config.sample.inc.php 另存文 config.inc.php
$cfg['Servers'][$i]['host'] = '127.0.0.1';
$cfg['Servers'][$i]['AllowNoPassword'] = true;
複製代碼
解決方法,貌似8.0的必需要求有密碼; 修改my.cnf
cd /usr/local/etc
vim my.cnf
新增一行
default_authentication_plugin = mysql_native_password
複製代碼
登錄數據庫,修改密碼
mysql -u root -p
mysql>use mysql;
ALTER USER root@'localhost' IDENTIFIED WITH mysql_native_password BY '您的密碼';
mysql>FLUSH PRIVILEGES;
複製代碼
Laravel連接數據庫錯誤處理
SQLSTATE[42000]: Syntax error or access violation: 1231 Variable 'sql_mode'
can't be set to the value of 'NO_AUTO_CREATE_USER' 複製代碼
修改database.php
'mysql' => [
'modes' => [
'ONLY_FULL_GROUP_BY',
'STRICT_TRANS_TABLES',
'NO_ZERO_IN_DATE',
'NO_ZERO_DATE',
'ERROR_FOR_DIVISION_BY_ZERO',
'NO_ENGINE_SUBSTITUTION',
],
],
複製代碼
便可修復;