由 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 上的多个站点,没有域名的主要内容,如果未能解决你的问题,请参考以下文章