我是 Nginx 新手(也使用 PHP 7.2),我不知道如何使用分离的文件夹访问多个站点。
因此,我将设置为默认文件夹/home/user/php;
。
那里我有几个文件夹名为:site1, site2, site3 etc
。
使用终端,我使用命令在我的默认文件夹上启动服务器php -S localhost:8000
。
问题是,当我在浏览器中输入时,localhost:8000/site1/
它会显示 index.php 文件中的内容,但会与该位置的其他文件混淆。例如图片。我有一个包含 png 文件的文件夹,位于/php/site1/images/
。但它们没有显示在浏览器页面上,因为根据终端日志,它在/php/images/
(不存在)中搜索那些 png 文件,而不是在中/php/site1/images/
。所有内容都在默认服务器文件夹中搜索,而不是在包含站点的子文件夹中。如何更改配置文件或如何使其读取单独的文件夹??
这是我的 Nginx 配置(/etc/nginx/sites/available/default
):
https://pastebin.com/pZHgPkCZ
答案1
步骤如下(假设:- 已安装 Nginx):
为文件夹中的两个或所有站点创建服务器块
/var/www/
:sudo mkdir -p /var/www/mytest1.com/public_html sudo mkdir -p /var/www/mytest2.com/public_html
修改权限以允许普通用户读写访问:
sudo chown -R $(whoami):$(whoami) /var/www/mytest1.com/public_html sudo chown -R $(whoami):$(whoami) /var/www/mytest2.com/public_html
设置权限以便可以正确提供页面:
sudo chmod -R 755 /var/www
为测试站点创建两个页面:
sudo echo "Welcome to mytest1.com!" > /var/www/mytest1.com/public_html/index.html sudo echo "Welcome to mytest2.com!" > /var/www/mytest2.com/public_html/index.html
创建服务器块:
复制默认的 nginx 主页默认文件:
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/mytest1.com
编辑复制的文件:
sudo nano /etc/nginx/sites-available/mytest1.com
- 向下滚动并将其更改
root /var/www/html;
为root /var/www/mytest1.com/public_html;
- 将其更改
server_name _;
为server_name mytest1.com www.mytest1.com;
- 将此更改
index index.html index.htm index.nginx-debian.html;
为此index index.php index.html index.htm index.nginx-debian.html;
- 向下滚动并将其更改
确保路径的值
fastcgi_pass socket
正确:跑步:
ls /var/run/php/
结果:
php7.2-fpm.pid php7.2-fpm.sock
如果注意指向正确的方向,请在服务器块文件中添加
php7.2-fpm.socket
位置,并查看文件的位置部分是否如下所示,删除以#
在某些区域实现这一点:... location ~ \.php$ { include snippets/fastcgi-php.conf; # # # With php-fpm (or other unix sockets): fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; # # With php-cgi (or other tcp sockets): # fastcgi_pass 127.0.0.1:9000; } ...
关闭编辑器并使用 测试 nginx 配置
sudo nginx -t
。查看任何错误,重复上述步骤。对于有效的语法,您将看到:nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
step 5 and 6
对另一个站点重复上述操作,使用对站点一mytest2.com
的操作mytest1.com
,另外对于第二个站点,在编辑文件时执行以下/etc/nginx/sites-available/mytest2.com
操作:listen 80 default_server; listen [::]:80 default_server;
更改为:
listen 80; listen [::]:80;
- 原因:
只有一个服务器块可以具有 default_server 规范。这告诉 Nginx 如果请求的 server_name 与任何可用的服务器块不匹配,则应恢复到哪个块。
- 原因:
创建符号链接:
sudo ln -s /etc/nginx/sites-available/mytest1.com /etc/nginx/sites-enabled/ sudo ln -s /etc/nginx/sites-available/mytest2.com /etc/nginx/sites-enabled/
删除默认服务器块的符号链接:
sudo rm /etc/nginx/sites-enabled/default
重新启动Nginx:
sudo service nginx restart
11:可选:编辑Hosts文件:
127.0.0.1 mytest1.com
127.0.0.1 mytest2.com
现在转到浏览器并输入localhost
,或者mysite1.com
如果您在文件中进行了输入/etc/hosts
。现在还请注意,nginx 监听的80
不是端口8080
。不是 php 服务器。
资源:
https://devanswers.co/installing-nginx-ubuntu-18-04-multiple-domains/