Nginx

通過 Homebrew 使用 nginx、mysql 和 php 的 OS X 10.10 本地主機環境

  • February 10, 2015

我正在使用自製軟體執行 Mac OSX 10.10 Yosemite。我使用的是使用 MAMP 的 localhost 環境,我想要一些不佔用資源且沒有所有臃腫的附加功能的東西。我已經通過自製軟體安裝了帶有 php-fpm 和 mcrypt 的 nginx、mysql 和 php56。我使用 Laravel 作為我的 php 框架。當我使用 MAMP 時,我會像這樣訪問 Laravel 項目:

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

查看公用文件夾登錄頁面(上面的第一個 uri)時,一切似乎都正常。我的 routes.php 文件中的任何其他子位置(上面的第二個 uri)都會返回 500 Internal Server 錯誤。在進行了一些搜尋、查看教程並測試了不同的 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 uris 添加到我的主機文件中,但如果這是唯一的答案,那麼我可以進行額外的配置工作。

這太複雜了,而且其中的某些部分似乎相互衝突。

   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;

引用自:https://serverfault.com/questions/666553