我是 Nginx 新手。
我的主要目标是在一个域名上托管两个网站。我希望有一个与主域名分开托管的子域名,例如:
- example.com 的服务来自
/home/user/Documents/vue_website/dist
- subdomain.example.com 的服务来自
/var/www/html
因为我在一台服务器上运行所有这些,所以我认为这无法完成,因为它们具有相同的 IP 地址。
我现在正尝试使用子目录来解决这个问题。如果我访问 example.com/wp,它应该会显示第二个网站。
当前 Nginx 站点配置如下:
server {
listen 80 default_server;
listen [::]:80 default_server;
return 301 https://my-domain.com$request_uri;
}
server {
access_log /var/log/nginx/scripts.log scripts;
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /etc/ssl/my-domain.com.pem;
ssl_certificate_key /etc/ssl/_.my-domain.com_private_key.key;
server_name my-domain.com www.my-domain.com;
location / {
root /home/pi/Documents/vue_website/dist;
index index.html;
}
location /wp {
root /var/www/html/;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 172.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
}
}
但那不管用。如果能得到任何帮助我将非常感激。
编辑: 所以我现在可以让子域名正常工作了。但现在的问题是,我只能通过 ssl / 在前面输入 https 来访问它,而这并不是我想要的。
因此,现在我尝试根据搜索到的域将 http 请求重定向到给定的站点
例如如果我去http://my-domain.com将我重定向到 https 等等。
我得到的代码如下:
'my-domain.com' '1';
'wp.my-domain.com' '2';
}
server {
listen 80;
if ($new = '1') {
return 301 https://my-domain.com$request_uri;
}
if ($new = '2') {
return 301 https://wp.my-domain.com$request_uri;
}
}
我的代码是否出了错,因为在我看来,如果我理解正确的话,它应该是那样工作的。
答案1
您认为您无法在一个 IP 上托管多个网站的假设是不正确的。您可以在一个 IP 上托管任意数量的网站,无论是使用 http 还是 https。如果您愿意,您还可以使用子文件夹托管不同的内容。
配置子域名相当简单,你只需要使用两个服务器块
server {
server_name example.com;
listen 443 ssl http2;
// Add other required SSL entries
root /var/www/site1;
}
server {
server_name subdomain.example2.com;
listen 443 ssl http2;
// Add other required SSL entries
root /var/www/site2;
}
使用子文件夹进行配置
server {
server_name example.com;
listen 443 ssl http2;
// Add other required SSL entries
location / {
root /var/www/site1;
}
location /subdir {
root /var/www/site2;
}
}
如果您需要进一步的帮助,请编辑您的问题并提供比“它不起作用”更多的细节。理想情况下,您可以分享 URL 的 curl、匹配的访问和错误日志条目、有用的 PHP/应用程序日志以及预期的行为。