V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
aaabababa
V2EX  ›  NGINX

nginx 子域名访问 subdomain 问题。

  •  
  •   aaabababa · 10 天前 · 693 次点击
    server {
    listen 443 ssl;
    server_name ~^(?<subdomain>.+).test.net$;
    root /www/test.net/$subdomain;
    index index.php index.html;
    }

    2024/04/23 14:45:41 [error] 3982#0: *1730098 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 88.238.49.45, server: ~^(?<subdomain>.+).test.net$, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/data/php745/var/run/socket:", host: "test.net"

    nginx 设置子域名访问后,一直报错?
    8 条回复    2024-04-24 11:48:51 +08:00
    joqsc722
        1
    joqsc722  
       10 天前
    这个错误信息表明你的 Nginx 配置在试图执行一个 PHP 脚本时遇到了问题,但是它没有找到请求的文件(即“Primary script unknown”)。这通常是因为 `root` 指令没有正确设置,或者 PHP-FPM 配置不正确。

    下面是你的配置和错误信息的一些要点:

    1. 你的 Nginx 配置试图通过正则表达式捕获子域名(`subdomain`),并将其用作 `root` 指令的一部分。
    2. 出错的请求是针对根路径 `/` 的简单 GET 请求。
    3. 错误信息指出 Nginx 无法找到应该执行的脚本。

    这里有几点你可以检查和修正:

    - 确保你的 `root` 路径正确无误。在你的配置中,如果 `subdomain` 是一个变量,你需要确保它被正确展开。在 Nginx 的配置中,尝试使用 `try_files` 指令来处理这种情况:

    ```nginx
    server {
    listen 443 ssl;
    server_name ~^(?<subdomain>.+).test.net$;
    root /www/test.net;
    index index.php index.html;

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

    # 其他 PHP 配置...
    }
    ```

    - 使用 `$subdomain` 变量时,请确保它被正确引用。在上面的配置中,我假设你有一个对应每个子域名的目录结构,例如 `/www/test.net/$subdomain`。

    - 确认 PHP-FPM 的配置和路径是正确的。确保 `fastcgi_pass` 指令指向正确的 PHP-FPM 套接字或地址。

    - 如果请求的是 `/`,Nginx 会试图查找 `root` 目录下的 `index.php` 或 `index.html`。确保这些文件在你的 `root` 目录中是存在的。

    - 检查 PHP-FPM 的错误日志,看看是否有关于脚本路径的更多信息。

    以下是完整的 `server` 块配置示例,包括处理 PHP 请求的部分:

    ```nginx
    server {
    listen 443 ssl;
    server_name ~^(?<subdomain>.+).test.net$;
    root /www/test.net;
    index index.php index.html;

    location / {
    try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
    include fastcgi_params;
    fastcgi_pass unix:/data/php745/var/run/socket;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    # 如果你的 PHP-FPM 需要的话,可能还需要 fastcgi_param PATH_INFO $fastcgi_path_info;
    }
    }
    ```

    在应用任何更改后,记得重新加载或重启 Nginx 服务。如果问题仍然存在,检查你的 PHP-FPM 日志获取更多线索。
    adoal
        2
    adoal  
       10 天前
    fastcgi_param SERVER_NAME $host;
    aaabababa
        3
    aaabababa  
    OP
       10 天前
    @adoal

    原来是
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    改成
    fastcgi_param SERVER_NAME $host;
    页面无法正常跳转呢
    aaabababa
        4
    aaabababa  
    OP
       10 天前
    @joqsc722 AI 解答的?

    root /www/test.net/$subdomain;

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

    原来的配置这样的
    aaabababa
        5
    aaabababa  
    OP
       10 天前
    set $subdomain_root /www/test.net/$subdomain;

    if (!-d $subdomain_root) {
    return 404;
    }

    搞定了,先判断目录是否存在就行了。。。
    lymanbernadette6
        6
    lymanbernadette6  
       9 天前
    @joqsc722
    @Livid 老大 AI
    Shiroka
        7
    Shiroka  
       9 天前 via iPhone
    AI 回答直接贴分享链接就行了,原封不动 cv 过来又臭又长还影响看下面的回答 😥
    Livid
        8
    Livid  
    MOD
       9 天前
    @lymanbernadette6 谢谢,那个账号已经被彻底 ban 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   824 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 103ms · UTC 22:12 · PVG 06:12 · LAX 15:12 · JFK 18:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.