我已承担了尝试弄清楚如何使用 Nginx 托管我的网站(以前使用 IIS)的任务。我购买了运行 CentOS 8 的 VPS。我一直在尝试配置 Nginx 以在同一端口上运行两个不同的域。
我已经检查并遵循了网上的多个指南,但仍然无法定位这两个网站。
安装 Nginx 并配置服务后,我在以下位置创建了两个 conf 文件:/etc/nginx/conf.d目录:
website1.com.conf
server {
listen 80;
root /var/www/website1.com;
index index.html index.htm;
server_name website1.com www.website1.com;
location / {
try_files $uri $uri/ =404;
}
}
website2.com.conf
server {
listen 80;
root /var/www/website2.com;
index index.html index.htm;
server_name website2.com www.website2.com;
location / {
try_files $uri $uri/ =404;
}
}
然后我还在目录中创建了两个基本的 index.html 文件/var/www/网站(1|2).com
最初,我必须从 nginx.conf 文件中删除默认服务器块,才能让其加载默认站点以外的任何内容。
nginx.conf
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
}
我一直尝试使用此 URL、我的 IP 地址以及 localhost 来加载该网站(http://0.0.0.0/website1)据我了解,Nginx 首先根据端口匹配传入请求,然后根据服务器名称匹配,我的两个配置文件都在监听端口 80。
我真的很感激有人能指点我在这里做错了什么,因为我所做的一切似乎都遵循文档。
答案1
您需要在 URL 中使用主机名(例如 website2.com)。该主机名应位于 DNS 中,或者,为了进行测试,位于 /etc/hosts 中,或位于工作站操作系统的等效目录中。
编辑: Web 浏览器的工作原理如下。当您有一个 URI (URL) 时,字符串会被拆分为多个组件(协议、用户、密码、主机、路径、查询、片段......)
名称解析- 主机是我们感兴趣的。它可以是主机名或 IP。如果是主机名,则名称将由位于 Web 客户端计算机上的解析器库解析。默认情况下,此库将使用hosts
文件,然后使用 DNS 来解析名称。
虚拟主机又称为 nginx 服务器块- Web 浏览器将发出 HTTP 请求,该请求将包含Host:
标头,以告知 Web 服务器他正在尝试访问哪个主机名。这就是为什么如果您想测试这些服务器,您需要有一个主机名而不是 IP。