【问题标题】:Can not use multiple projects不能使用多个项目
【发布时间】:2019-04-25 21:17:23
【问题描述】:

我正在尝试将我的 nginx 配置为按路径使用多个项目。

所以我有一个基于javascript(VueJs 项目)的客户端,它向 api 发送请求。 api 的根源以/api(Laravel 项目)开头。 我也有基于 Laravel 的管理面板。管理面板的 url 将以 /admin 开头。

这是我的nginx 配置文件

server {
    server_name cabinet.mydomain.org; 

   # auth_basic "Restricted Content";
   # auth_basic_user_file /etc/nginx/.htpasswd;

   # access_log /var/www/cabinet/access.log;
   # error_log /var/www/cabinet/error.log;

    root /var/www/cabinet/api/html/public;

    # Add index.php to the list if you are using PHP
    index index.php index.html index.htm;

    #location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
    #   try_files $uri $uri/ =404;
    #}

    location /api {
          access_log /var/log/cabinet.api.acc.log;
          error_log /var/www/cabinet.api.error.log debug;
          try_files $uri $uri /index.php$args;
        }

        location /admin {
          access_log /var/log/cabinet.admin.acc.log;
          error_log /var/www/cabinet.admin.error.log debug;
      root /var/www/cabinet-admin/public;
          try_files $uri $uri /index.php$args;
        }



        location / {
          try_files $uri $uri/ /index.html;
          root /var/www/cabinet/client/dist;
        }

    location = / {
          return 301 $scheme://$server_name/login/;
        }


#        location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
#       return 500; 
           # Some basic cache-control for static files to be sent to the browser
#           expires max;
#           add_header Pragma public;
#           add_header Cache-Control "public, must-revalidate, proxy-revalidate";
#       }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #

    location ~ \.php$ {
       include snippets/fastcgi-php.conf;
       fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #   deny all;
    #}

 # managed by Certbot

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/cabinet.mydomain.org-0001/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/cabinet.mydomain.org-0001/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

server {
    if ($host = cabinet.mydomain.org) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    #if ($host = cabinet.mydomain.com) {
    #    return 301 https://cabinet.mydomain.org$request_uri;
    #} # managed by Certbot

    #if ($host = cabinet.mydomain.org) {
    #    return 301 https://$host$request_uri;
    #} # managed by Certbot

    server_name cabinet.mydomain.org cabinet.mydomain.com;
    listen 80;
    return 301 https://cabinet.mydomain.org$request_uri;
    return 404; # managed by Certbot


}

因此,当尝试访问 /admin 时,服务器会重定向到 /login

请帮忙解决这个问题

【问题讨论】:

  • 您是否尝试过 api 和管理位置块:try_files $uri $uri/ /index.php$args?注意第二个 $uri 参数末尾的斜线。否则看起来还不错..
  • 我需要设置哪个块?
  • /api 和 /admin,但正如我所检查的:如果位置匹配,如果找不到文件或目录,它将不会使用其他位置块。所以 /admin 应该被抓住或给出 404,而不是退回到 = /

标签: laravel nginx location root


【解决方案1】:

试试这个。

server {
    server_name cabinet.mydomain.org; 

   # auth_basic "Restricted Content";
   # auth_basic_user_file /etc/nginx/.htpasswd;

   # access_log /var/www/cabinet/access.log;
   # error_log /var/www/cabinet/error.log;

    root /var/www;

    # Add index.php to the list if you are using PHP
    index index.php index.html index.htm;

    #location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
    #   try_files $uri $uri/ =404;
    #}

    location /api {
          access_log /var/log/cabinet.api.acc.log;
          error_log /var/www/cabinet.api.error.log debug;
          root PATH_TO_YOUR_PROJECT;
          try_files $uri $uri /PATH_TO_PROJECT/index.php$args;
        }

        location /admin {
          access_log /var/log/cabinet.admin.acc.log;
          error_log /var/www/cabinet.admin.error.log debug;
          root /var/www/cabinet-admin/public;
          try_files $uri $uri /cabinet-admin/public/index.php$args;
        }

请关注与

相关的文档

$try_files

root

【讨论】:

  • 无法重启 nginx 。第 23 行有错误
  • @KhazarAmjer 确保您已将 PATH_TO_PROJECT 更改为真实路径
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-03
  • 2013-04-10
  • 2011-10-29
  • 1970-01-01
  • 2020-01-07
相关资源
最近更新 更多