我有两个域,分别是D1“abc.com“和D2“def.com“。我在Nginx上将D1配置为以下服务器块。
server {
listen 80;
server_name *.abc.com,abc.com;
root /var/www/abc/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
字符串
它与D1配合得非常好。
但当配置与以下服务器块相同的D2域时
server {
listen 80;
server_name *.def.com,def.com;
root /var/www/def/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
型
配置后,按如下方式运行命令:
sudo ln -s /etc/nginx/sites-available/abc.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/def.com /etc/nginx/sites-enabled/
sudo nginx -t //gives me ok as output
sudo systemctl reload nginx
sudo systemctl restart nginx
型
它将重定向到D1,名称为“abc.com“
我使用的是Laravel8,php8.1和Nginx
是否需要在2个不同的服务器上托管应用程序?如何实现?
2条答案
按热度按时间s71maibg1#
我认为问题是理查德已经在评论中提到的。你需要在server_name下的每个域名之间留出间距,而不是逗号。
为什么它会为abc.com工作的原因可能是它回落到默认/第一配置。
tct7dpnv2#
我同意其他人的看法,这是因为第一个服务器块被视为默认服务器。
由于其他域无法Map(两个名称之间缺少空格),因此从第一个块提供请求。
任何一个都应该总是有虚拟的默认服务器“来捕捉这些场景”
字符串
或
我个人最喜欢的服务器块
型
由于这两个服务器在其他配置上没有变化,这将有助于维护和调试。
下面的小演示:注意:403状态码只是因为在指定的根目录下没有索引文档,否则这是工作配置。
的数据