模块化 nginx 配置不起作用

modular nginx configuration not working

我在 Unix 套接字上使用 Ubuntu 14.04 + nginx + HHVM。
我有几个项目,所有 运行 都在不同子目录中的同一 IP 下。我一直在尝试使配置模块化,因此当项目发生变化时,只需要进行小的更改。但是,没有一个站点在运行。我得到的是一个没有 HTML 标记的普通“404 未找到文件”页面。 nginx 和 HHVM 的错误日志都没有显示任何内容。

这是我的目录结构:

nginx/
  main/
    index.php
  phpmyadmin/
    index.php
  laravel/
    public/
      index.php

以及我的 nginx 配置:

全球

server {
  listen 80 default_server;
  listen [::]:80 default_server;

  server_name localhost;

  access_log    /var/log/nginx/access.log;
  error_log     /var/log/nginx/error.log info;
  charset utf-8;

  root /usr/share/nginx;

  include /etc/nginx/sites-available/main.conf;
  #include /etc/nginx/sites-available/phpmyadmin.conf;
  #include /etc/nginx/sites-available/laravel.conf;

  include hhvm.conf;

  # Deny .htaccess file access
  location ~ /\.ht {
      deny all;
  }
}

main.conf

location / {
  root /usr/share/nginx/main;
  index index.php;
  try_files $uri $uri/ =400;
}

hhvm.conf

location ~ \.(hh|php)$ {
    fastcgi_keep_conn on;
    # fastcgi_pass   127.0.0.1:9000;
    fastcgi_pass   unix:/var/run/hhvm/hhvm.sock;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

也许最简单的方法是为每个项目创建一个虚拟主机。所以你有一个域(url 中没有文件夹)而且它也是模块化的。

但是如果你想保留你的结构,也许可以使用这个配置:

# For example for your main:
location /main {
  root /usr/share/nginx/main;
  include hhvm.conf;
  index index.php;
  try_files $uri $uri/ =400;
}

/main、/phpmyadmin 和 /laravel 需要这些块。

但是,此解决方案的问题可能是 laravel 例如最容易在 laravel.local 这样的域上使用,而不是在 pc.local/laravel 这样的文件夹中使用,因为 url 重写你需要的。 这将是为每个文件夹切换到具有自己域的虚拟主机的另一个原因。子域也是可能的。

这是我更新的配置文件,所以它可以工作(Laravel 仍在进行中,只有主页在工作,这很痛苦):

PKeidel 的回答被接受,因为他启发了我做这个。谢谢!

主要

server {
  listen 80 default_server;
  listen [::]:80 default_server;

  server_name localhost;

  access_log    /var/log/nginx/access.log;
  error_log     /var/log/nginx/error.log debug;
  charset utf-8;

  include sites-available/main.conf; 
  include sites-available/phpmyadmin.conf;
  include sites-available/laravel.conf;

  # Deny .htaccess file access
  location ~ /\.ht {
      deny all;
  }
}

main.conf

location ^~ / {
  root /usr/share/nginx/yoyo;
  include php-template;
  try_files $uri $uri/ =404;
}

phpmyadmin.conf

location ^~ /pma {
  root /usr/share/nginx;
  include php-template;
  try_files $uri $uri/ index.php?$query_string;
}

php-模板

index index.php;
include hhvm.conf;