gpt4 book ai didi

Yii 2 高级应用模板的 Nginx 配置

转载 作者:行者123 更新时间:2023-12-02 10:12:03 28 4
gpt4 key购买 nike

我想以这样的方式配置 Nginx 网络服务器:

  • /index.php 的请求URI 应该由 public_html/frontend/web/index.php 处理
  • /admin/index.php 的请求URI 应该由 public_html/backend/web/index.php 处理

  • 请建议我错在哪里。这是我的配置:
    server {
    listen 80;
    server_name yii2.lo;
    server_tokens off;

    client_max_body_size 128M;
    charset utf-8;

    access_log /var/log/nginx/yii2-access.log main buffer=50k;
    error_log /var/log/nginx/yii2-error.log notice;

    set $host_path "/srv/http/yii2/public";
    set $yii_bootstrap "index.php";

    index $yii_bootstrap;

    location / {
    root $host_path/frontend/web;
    try_files $uri $uri/ /$yii_bootstrap?$args;

    }

    location /admin {
    root $host_path/backend/web;
    try_files $uri $uri/ /$yii_bootstrap?$args;
    }

    location ~ \.php$ {
    try_files $uri =404;

    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_index $yii_bootstrap;

    # Connect to php-fpm via socket
    fastcgi_pass unix:/run/php-fpm/php-fpm.sock;

    fastcgi_connect_timeout 30s;
    fastcgi_read_timeout 30s;
    fastcgi_send_timeout 60s;
    fastcgi_ignore_client_abort on;
    fastcgi_pass_header "X-Accel-Expires";

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_param HTTP_REFERER $http_referer;
    include fastcgi_params;
    }

    location ~* \.(js|css|less|png|jpg|jpeg|gif|ico|woff|ttf|svg|tpl)$ {
    expires 24h;
    access_log off;
    }

    location = /favicon.ico {
    log_not_found off;
    access_log off;
    }

    location = /robots.txt {
    log_not_found off;
    access_log off;
    }

    location ~ /\. {
    deny all;
    access_log off;
    log_not_found off;
    }
    }

    最佳答案

    长话短说:使用下面提供的第一种方法。

    答案的其余部分是建议列表。

    我将把我的答案分成两部分。
    在第一部分中,我将根据您想要的 URL 请求告诉您实现目标的最简单和最快的方法,但它在一定程度上破坏了应用程序结构,不过没什么大不了的。

    在第二部分中,我将向您描述您在配置文件中出错的地方,并且我将向您展示一个写得不好的配置以满足您的需求,但它是有效的。

    一、共享主机部署

    我强烈建议您使用它。这是一个 official way来自 Yii 2 文档使后端在同一个域中工作,尽管它有助于将项目部署到共享主机。而且它不需要任何额外的 nginx 配置,只需要前端 root 的基本配置。

    让我根据本指南写一个简单的列表:

  • /backend/web 移动内容至 /frontend/web/admin .
  • 更正 /frontend/web/admin/index.php 中的脚本路径(和 index-test.php ,如果你使用它)

  • 就是这样,您的后端位于 /admin 的同一域中。网址。此外,请阅读本指南关于 cookie 的最后一部分。高级模板旨在为每个环境使用不同的域,因此该指南描述了共享主机的后端配置,以将 cookie 与前端和后端分开。

    当然,别忘了修改你的 /environments使用 /init 正确初始化项目的文件脚本。

    二、 nginx配置

    错误

    我不是专业的 nginx 管理员,但我可以根据我的个人经验和文档描述您的配置中的错误。不幸的是,我将无法提供指向文档的链接,因为我当前的评级不允许我发布超过 2 个链接。

    服务器上下文 root
    您没有 root服务器上下文中的指令。因此,当 ~ \.php$ location 匹配,它根本没有 root 并使用默认的 nginx root。尝试设置通用 root server 中的指令上下文,那么默认情况下所有位置都会有它。例如:
    server {
    # Beginning of your configuration
    # ...

    root /srv/http/yii2/public/frontend/web;

    # The rest of your configuration
    # ...
    }

    没有更高的上下文根是常见的 pitfall .
    root而不是 alias
    其次,当一个位置匹配时,uri 附加 到该位置的根目录,这就是服务器尝试查找的路径。因此,您的 /admin location 建议服务器搜索 $host_path/backend/web/admin .在您的情况下,您应该使用 alias指令告诉服务器匹配的位置 uri 是指别名路径,而不是附加到 root:
    location /admin {
    alias $host_path/backend/web;

    # The rest of location
    # ...
    }

    我建议您阅读有关 location 的相关 nginx 文档。 , rootalias指令。

    工作但写得不好的配置

    我发布此示例配置并附上注释仅供您理解,不用于生产用途, 我不鼓励您将其应用于您的生产 (直到你确定它是安全的)。

    它可以工作,但它有一个恼人的缺陷:如果你直接请求,后端找不到 Yii2 入口脚本(如 /admin/index.php),所以它必须与 enablePrettyUrl 一起使用。设置为 trueshowScriptName设置为 false ,但是它会在后端 Web 根目录中找到任何其他 PHP 脚本。
    server {
    # The beginning of your configuration
    # ...

    # By default we will provide frontend
    root /srv/http/yii2/public/frontend/web;
    index index.php;

    location / {
    try_files $uri $uri/ /index.php?$args;
    }

    location /admin {
    # We use /web/index here to make backend call to php scripts
    # distinct from frontend call
    index /web/index.php;
    alias $root_base/backend/web;
    try_files $uri $uri/ /web/index.php?$args;

    # Rewrite PHP requests from /admin to /web
    # However, Yii2 entry script returns 404
    location ~ ^/admin/.*\.php$ {
    rewrite ^/admin/(.*)$ /web/$1;
    }

    }

    location ~ ^/web/.*\.php$ {
    # Make sure this location cannot be called externally
    internal;

    # Remember, that the uri of this location
    # will be appended to this root!
    root $root_base/backend;

    # PHP settings for backend
    }

    location ~ \.php$ {
    # PHP settings for frontend
    }

    # The rest of your configuration
    # ...
    }

    此外,添加 baseUrl属性(property)给 request在 Yii2 后端配置中添加组件并将其设置为 /admin .

    我希望我的回答能帮助你部署你的 Yii2 高级项目和更多地了解 nginx,不过你的问题是 6 个月前的。

    关于Yii 2 高级应用模板的 Nginx 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24585540/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com