通过 Homebrew 使用 nginx、mysql 和 php 的 OS X 10.10 Localhost 环境

通过 Homebrew 使用 nginx、mysql 和 php 的 OS X 10.10 Localhost 环境

我正在使用 Homebrew 运行 Mac OSX 10.10 Yosemite。我使用的是使用 MAMP 的本地主机环境,我想要一个资源占用较少且没有所有臃肿附加功能的东西。我已经通过 Homebrew 安装了 nginx、mysql 和 php56,以及 php-fpm 和 mcrypt。我使用 Laravel 作为我的 php 框架。当我使用 MAMP 时,我会像这样访问 Laravel 项目:

localhost/myproject/public/
localhost/myproject/public/some_route

查看公共文件夹登录页面(上面的第一个 uri)时,一切似乎都正常工作。我的 routes.php 文件中的任何其他子位置(上面的第二个 uri)都返回 500 内部服务器错误。在进行了一些搜索、查看了教程并测试了不同的 nginx 配置后,我目前在 nginx.conf 文件中的内容如下:

worker_processes  4;
#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include        mime.types;
    default_type   application/octet-stream;

    server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;
        root /Users/adam2k/www;
        index index.html index.htm index.php;   
        rewrite_log on;

        try_files $uri $uri/ @rewrite;

        location @rewrite {
            rewrite ^/(.*)$ /index.php?_url=/$1;
        }   

        location / { 
           try_files $uri $uri/ /index.html;
        }

        location ~ .php$ {
            try_files $uri = 404;
            include /usr/local/etc/nginx/fastcgi.conf;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_intercept_errors on;
            # break;
        }
    }
}

我的 /etc/hosts 文件如下所示:

127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost

在错误日志下我收到此消息:

2015/02/10 12:51:32 [error] 22306#0: *19 rewrite or internal redirection cycle while internally redirecting to "/index.html", client: ::1, server: , request: "GET /favicon.ico HTTP/1.1", host: "localhost"

这让我相信问题在于

location / {...}

配置文件中的区域,但我不确定如何解决这个问题。

我并不想对虚拟主机做任何花哨的事情,也不想在我的主机文件中添加特殊的.dev 或 .local uri,但如果这是唯一的答案,那么我愿意投入额外的配置工作。

答案1

这太复杂了,而且其中的各个部分似乎相互冲突。

    try_files $uri $uri/ @rewrite;

    location @rewrite {
        rewrite ^/(.*)$ /index.php?_url=/$1;
    }   

    location / { 
       try_files $uri $uri/ /index.html;
    }

将其简化为单个指令。

    try_files $uri $uri/ /index.php?_url=$request_uri;

相关内容