由 nginx 服务的 localhost 上的多个站点,没有域名

Posted

技术标签:

【中文标题】由 nginx 服务的 localhost 上的多个站点,没有域名【英文标题】:multiple site on localhost served by nginx without domain name 【发布时间】:2021-03-27 11:11:16 【问题描述】:

我在 ubuntu 20.04 rpi4 上,我喜欢写一些 www 站点进行测试。

使用服务器块中的一些服务器块和 server_name 来配置 nginx 非常简单,以指向一些不存在的虚拟域,然后将此域设置为指向 /etc/hosts 中的 localhost:

# /etc/hosts
127.0.0.1 adminer
127.0.0.1 pippo
127.0.0.1 pluto

拥有这样的网站: http://adminer http://pippo http://冥王星

但我喜欢避免 /etc/hosts 设置。 我喜欢的是: http://localhost/adminer http://localhost/pippo http://localhost/pluto ... 指向 3 个不同的站点管理员,pippo 和 pluto。

有可能吗? 必须使用什么配置?

我可以为一个站点使用一个服务器块还是让我对所有 3 个站点使用一个服务器块? 我是 nginx 新手...

最好的问候, 莱昂纳多

【问题讨论】:

***.com/questions/11570321/… 好的。所以我不能有多个 server_name localhost 并且必须为子站点使用别名,就像它们就像子域一样。我试着让你知道。谢谢。 【参考方案1】:

我刚刚遇到了同样的问题,我使用端口来解决这个问题。

此解决方案适用于本地机器和家庭网络,并且可能适用于任何没有域的 VPS。

网络服务器 1

打开防火墙,例如端口 81

sudo ufw allow 81

创建您的第一个网络目录

sudo mkdir -p /var/www/web-folder-name1

在您的网络文件夹中创建测试内容

sudo nano /var/www/web-folder-name1/index.html

并在此处粘贴任何内容以进行测试

Hello World 1!

在 Nginx 中创建一个虚拟主机文件

sudo nano /etc/nginx/sites-available/web-folder-name1

并粘贴以下内容

server 
    listen 81; # the port is important
    server_name _; # underscore is ok as you don't have a domain
    root /var/www/web-folder-name1;
    index index.html;

启用您的网络服务器

sudo ln -s /etc/nginx/sites-available/web-folder-name1 /etc/nginx/sites-enabled/

网络服务器 2

打开防火墙,例如端口 82

sudo ufw allow 82

创建您的第二个网络目录

sudo mkdir -p /var/www/web-folder-name2

在您的网络文件夹中创建测试内容

sudo nano /var/www/web-folder-name2/index.html

并在此处粘贴任何内容以进行测试

Hello World 2!

在 Nginx 中创建一个虚拟主机文件

sudo nano /etc/nginx/sites-available/web-folder-name2

并粘贴以下内容

server 
    listen 82;
    server_name _;
    root /var/www/web-folder-name2;
    index index.html;

启用您的网络服务器

sudo ln -s /etc/nginx/sites-available/web-folder-name2 /etc/nginx/sites-enabled/

重启 Nginx

sudo systemctl restart nginx

在您的浏览器中测试

127.0.0.1:81
127.0.0.1:82

# or
localhost:81
localhost:82

# or if you're on a network
static-ip:81
static-ip:82

【讨论】:

【参考方案2】:

感谢@lotfio。

如果 server_name 相同,我想其他服务器块不能使用相同的 server_name。

为了避免在 /etc/hosts 上进行设置,我们可以这样做:

关于/etc/nginx/sites-available/default

server 
#...  normal default stuff conf
include /etc/nginx/sites-avilable/localhost_adminer.inc;
incluse /etc/nginx/sites-avilable/localhost_pippo.inc;
#...  
#...  normal default stuff conf

如果你想在 apache2 上为管理员做一个反向代理,比如我第一次尝试从 apache2 移动到 nginx,你必须将 apache2 配置为侦听其他端口(我选择 8181):

在 /etc/nginx/sites-available/localhost_adminer.inc

location /adminer/ 
  index conf.php;
  alias /etc/adminer/;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $remote_addr;
  proxy_set_header Host $host;
  proxy_pass http://127.0.0.1:8181/adminer/;
    

(我在 ubuntu 上,所以 adminer 包配置为在 /etc/adminer/ 上启动)

pippo、冥王星等网站等等。

最好的问候, 莱昂纳多

【讨论】:

以上是关于由 nginx 服务的 localhost 上的多个站点,没有域名的主要内容,如果未能解决你的问题,请参考以下文章

对managedVM上的localhost节点服务器进行应用程序调用

LNMP架构搭建(基础入门级)

使用 nginx 和流星上传和访问服务器上的图像

Nginx Nginx实现端口转发

nginx 配置nodejs后台代理

Nginx 实现端口转发