macOS10.13.6搭建mnmp遇到的坑

1.macOS自带有apache和php,需要彻底删除这两个,通过brew重新安装nginx,php最新版本;安装brew请参考https://www.jianshu.com/p/e374c2e5b7ce
2.安装好nginx之后需要配置多站点;
3.安装好php之后首先测试能否访问php文件,很显然是不行的,因为会遇到各种问题;
①提示
An error occurrentd.
sorry,the page you are looking for is currently unavailable.
Please try again later.
.......
如何解决?

  1. 开启php-fpm即可
[geandeiMac:~ gean$ cd /usr/local/etc/php/7.4/sbin/
[geandeiMac:~ gean$ sudo php-fpm   这种方式只能开启一次,重启又得重新开启所以用下面这种方式. 
[geandeiMac:~ gean$ nohup ./php-fpm > a.log &
  1. 开启过程中会遇到很多错误
    2.1 如,提示文件限制,需要修改默认的open files值为655360。
[geandeiMac:~ gean$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 256
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 2048
virtual memory          (kbytes, -v) unlimited

2.2 创建两个新的配置文件,配置系统打开最多文件限制(如果没有的话)

[geandeiMac:~ gean$ sudo vi /Library/LaunchDaemons/limit.maxfiles.plist

复制以下内容

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  <plist version="1.0">
    <dict>
      <key>Label</key>
        <string>limit.maxfiles</string>
      <key>ProgramArguments</key>
        <array>
          <string>launchctl</string>
          <string>limit</string>
          <string>maxfiles</string>
          <string>655360</string>
          <string>655360</string>
        </array>
      <key>RunAtLoad</key>
        <true/>
      <key>ServiceIPC</key>
        <false/>
    </dict>
  </plist>

:wq保存退出

[geandeiMac:~ gean$ sudo vi /Library/LaunchDaemons/limit.maxproc.plist

复制以下内容

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple/DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  <plist version="1.0">
    <dict>
      <key>Label</key>
        <string>limit.maxproc</string>
      <key>ProgramArguments</key>
        <array>
          <string>launchctl</string>
          <string>limit</string>
          <string>maxproc</string>
          <string>2048</string>
          <string>2048</string>
        </array>
      <key>RunAtLoad</key>
        <true />
      <key>ServiceIPC</key>
        <false />
    </dict>
  </plist>

:wq保存退出
2.3 以上两个文件 需要owned by root:wheel

[geandeiMac:~ gean$ chown root:wheel /Library/LaunchDaemons/limit.maxproc.plist
[geandeiMac:~ gean$ chown root:wheel /Library/LaunchDaemons/limit.maxproc.plist

2.4 执行launchctl limit是配置生效。需要重启电脑(本人系统 OS X 10.13.6)
重启后终端执行ulimit -a查看是否修改成功

[geandeiMac:~ gean$ launchctl limit
[geandeiMac:~ gean$ ulimit -a

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 655360
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 2048
virtual memory          (kbytes, -v) unlimited

修改成功之后也许还会提示另外一种错误,比如日志错误,比如之前会出现找不到php-fpm.conf文件,这可能是误删或者是本身就缺少这个文件导致php-fpm启动不了。

②访问控制器里面的方法,提示
404 Not Found
原因,nginx不支持pathinfo模式,
只能通过http://www.xxx.com/index.php?s=index/index来访问
如何解决?需要http://www.xxx.com/index/index以这样的形式访问,隐藏index.php
1.在fastcgi.conf文件中添加fastcgi_param PATH_INFO $fastcgi_path_info;

[geandeiMac:~ gean$sudo vi /usr/local/etc/nginx/fastcgi.conf
fastcgi_param  PATH_INFO          $fastcgi_path_info;
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REQUEST_SCHEME     $scheme;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

:wq保存退出

  1. 配置网站域名服务
    2.1 在nginx/新建servers文件夹,里面新建conf文件
    比如域名为www.nihao.com 新建一个nihao.conf,这个文件能生效的前提是nginx.conf文件中的include servers/*.conf呈打开状态(去掉#)
    直接复制nginx.conf里面的server{}块会提示以下错误
    Warning: realpath(): open_basedir restriction in effect. File(/Volumes/程序开发/www/Html/nihao/app) is not within the allowed path(s): (/Volumes/程序开发/www/Html/nihao/public:/tmp/:/proc/) in /Volumes/程序开发/www/Html/nihao/thinkphp/base.php on line 22

Warning: is_file(): open_basedir restriction in effect. File(/Volumes/程序开发/www/Html/nihao/thinkphp/library/think/Error.php) is not within the allowed path(s): (/Volumes/程序开发/www/Html/nihao/public:/tmp/:/proc/) in /Volumes/程序开发/www/Html/nihao/thinkphp/library/think/Loader.php on line 114

Fatal error: Uncaught Error: Class 'think\Error' not found in /Volumes/程序开发/www/Html/nihao/thinkphp/base.php:62 Stack trace: #0 /Volumes/程序开发/www/Html/nihao/thinkphp/start.php(16): require() #1 /Volumes/程序开发/www/Html/nihao/public/index.php(17): require('/Volumes/\xE7\xA8\x8B\xE5\xBA\x8F...') #2 {main} thrown in /Volumes/程序开发/www/Html/nihao/thinkphp/base.php on line 62
或者会提示No input file specified
解决如下

[geandeiMac:~ gean$sudo vi /usr/local/etc/nginx/servers/nihao.conf

复制下面的代码到nihao.conf

server {
        listen       80;
        server_name  www.nihao.com;

        #charset koi8-r;
        #下面access_log和error_log两个日志文件如果打开需要在nginx.conf文件中去掉下面三行的#
        #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  logs/nihao.access.log  main;
        error_log logs/nihao.error.log;
        location / {
            root   /Volumes/程序开发/www/Html/nihao/public/;
            index  index.html index.htm index.php;
            #这里的if判断主要是为了配置url隐藏index.php和支持pathinfo模式,同时支持index.php/模块/方法  这种形式的访问
            if (!-e $request_filename) {
                rewrite ^/index.php(.*)$ /index.php?s=$1 last;
                rewrite ^(.*)$ /index.php?s=$1 last;
                break;
            }
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
            root  /Volumes/程序开发/www/Html/nihao/public/;
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index  index.php;
            #下面这句很重要,必须添加,不然打开网页会提示错误或者空白页面
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include     fastcgi_params;
            #下面的配置主要解决Warning: realpath(): open_basedir restriction in effect. 
            set $real_script_name $fastcgi_script_name;
            if ($real_script_name ~ "^(.+?\.php)(/.+)$") {
               set $real_script_name $1;
            }
            fastcgi_split_path_info ^(.+?\.php)(/.*)$;
           #fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_param PHP_VALUE "open_basedir=$document_root/../:/tmp/:/proc/";
            fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/../:/tmp/:/var/tmp/:/proc/";
        }
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

:wq保存退出

2.2 如果在浏览器输入自定义域名访问的话,需要在hosts文件中添加127.0.0.1 www.nihao.com的域名解析

[geandeiMac:~ gean$ sudo vi /etc/hosts

添加一行
127.0.0.1 www.nihao.com
:wq保存退出

所有配置完成之后重启nginx服务,使用80端口必须加上sudo,不然没有权限

[geandeiMac:~ gean$ sudo nginx -s reload

后续继续更新......

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345