nginx 子域名访问 subdomain 问题。

24 天前
 aaabababa
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 设置子域名访问后,一直报错?
857 次点击
所在节点    NGINX
8 条回复
joqsc722
24 天前
这个错误信息表明你的 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
24 天前
fastcgi_param SERVER_NAME $host;
aaabababa
24 天前
@adoal

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

root /www/test.net/$subdomain;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

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

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

搞定了,先判断目录是否存在就行了。。。
lymanbernadette6
24 天前
@joqsc722
@Livid 老大 AI
Shiroka
23 天前
AI 回答直接贴分享链接就行了,原封不动 cv 过来又臭又长还影响看下面的回答 😥
Livid
23 天前
@lymanbernadette6 谢谢,那个账号已经被彻底 ban 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1034971

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX