在 Ubuntu 18.04 上运行多个站点 Nginx

在 Ubuntu 18.04 上运行多个站点 Nginx

我是 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):

  1. 为文件夹中的两个或所有站点创建服务器块/var/www/

    sudo mkdir -p /var/www/mytest1.com/public_html
    sudo mkdir -p /var/www/mytest2.com/public_html
    
  2. 修改权限以允许普通用户读写访问:

    sudo chown -R $(whoami):$(whoami) /var/www/mytest1.com/public_html
    sudo chown -R $(whoami):$(whoami) /var/www/mytest2.com/public_html
    
  3. 设置权限以便可以正确提供页面:

    sudo chmod -R 755 /var/www
    
  4. 为测试站点创建两个页面:

    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
    
  5. 创建服务器块:

    1. 复制默认的 nginx 主页默认文件:

      sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/mytest1.com
      
    2. 编辑复制的文件:

      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;
  6. 确保路径的值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
      
  7. 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 与任何可用的服务器块不匹配,则应恢复到哪个块。

  8. 创建符号链接:

    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/
    
  9. 删除默认服务器块的符号链接:

    sudo rm /etc/nginx/sites-enabled/default
    
  10. 重新启动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/

https://devanswers.co/installing-php-nginx-ubuntu-18-04/

相关内容