Nginx   发布时间:2022-05-11  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Nginx在子文件夹中有多个站点大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我想以这样的方式配置Nginx,以便我只需要很少的努力来添加新网站.

我通过以下方式看到这一点:创建新站点时,我将其放在/ var / www下的子文件夹中,在Nginx配置文件中添加新位置,该文​​件只包含所需站点类型的配置模板.它看起来像这样

server 
{
  listen 80;
  server_name localhost;
  root /var/www;        

  LOCATIOn /site1
  {
    include drupal.conf;
  }

  LOCATIOn /site2
  {
    include wordpress.conf;
  }
}

但是,不幸的是,这在我的情况下不起作用.问题在于嵌套位置.我在其中一个包含的模板中有以下几行:

...

LOCATIOn  /core/ 
{
  deny all;
}

LOCATIOn / 
{
  try_files $uri $uri/ @rewrite;
}

....

Nginx给了我以下错误:

所以我需要为每个站点指定完整路径(比如/ site1 / core /),但是我将无法将其作为一个可重用的段提取出来.

以前,作为替代方案,我使用不同的server_name(site1.locahost,site2.localhost …)和编辑的/ etc / hosts文件配置了多个服务器指令.在这种情况下,只要所有内容都在域的根目录下,我就不需要嵌套位置.但是,正如我所说,我正在寻找一种尽可能简化工作流程的方法,编辑/ etc / hosts在我看来就像我想要避免的额外动作.

所以问题是如何最好地处理这种情况?你如何在本地组织不同网站的工作?

最佳答案
在家里和工作中,我使用Bind9和Nginx的组合来解决这个问题.它确实需要一些设置,但一旦它启动你就不需要再次触摸你的Nginx配置文件.我在底部添加了一些限制.

建立

设置DNS服务器,(Bind9,dnsmasq)

1)设置本地DNS服务器,并创建一个名为DEV的主机
2)在DEV中创建一个A名称条目

* A 127.0.0.1

并重新启动DNS服务器.
3)确保你可以挖掘* .dev并验证你是否返回127.0.0.1.

设置Nginx

1)在你的Nginx.conf或你存储conf.d的东西的任何地方,创建一个看起来或多或少的vHost条目:你可以根据自己的需要调整它.

server {
    listen   80;
    server_name *.dev;
    access_log  /var/log/Nginx/access.log;
    error_log   /var/log/Nginx/error.log;

    if ($host ~* ^(.*).dev$) {
        set $site $1;
    }

    if (!-d /var/www/$site/) {
        return 404;
    }

     LOCATIOn ~ index.php${
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_pass   BACkend;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILename  /var/www/$site/$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_param  QUERY_StriNG     $query_String;
        fastcgi_param  requEST_METHOD   $request_method;
        fastcgi_param  CONTENT_TYPE     $content_type;
        fastcgi_param  CONTENT_LENGTH   $content_length;
        fastcgi_intercept_errors        on;
        fastcgi_ignore_client_abort     off;
        fastcgi_connect_timeout 60;
        fastcgi_send_timeout 180;
        fastcgi_read_timeout 180;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;
    }

    LOCATIOn ~ / {
            try_files $uri $uri/ /index.php?$args;
    }
}

2)重启Nginx服务.

3)利润

设置完成后,要创建新站点,您只需在/ var / www /中创建一个新文件夹即可.

@H_672_7@mkdir -p /var/www/sitename/

该站点及其下面的php可以通过sitename.dev访问.

如前所述,这有一些限制. sitename必须全部为小写,并且不包含空格或特殊字符(包括句点).其次,它实际上只适用于通过index.php引导的站点.

如果您有完全不同的网站结构,您可以修改一些内容,以便为您提供更强大的设置.例如,你可以编写你的配置,使它看起来像这样.

server {
    listen   80;
    server_name *.*.dev;

    [...]

    if ($host ~* ^(.*).(.*).dev$) {
        set $site $1;
        set $folder $2;
    }

    if (!-d /var/www/$folder/$site/) {
        return 404;
    }

    [...]
        fastcgi_param  SCRIPT_FILename  /var/www/$folder/$site/$fastcgi_script_name;
    [...]

}

假设你更新你的DNS服务器以响应..dev,那么你可以按如下方式编写我们的目录,只是为了给你一个想法.

/var/www/wordpress/site1
/var/www/wordpress/site2
/var/www/wordpress/site3

/var/www/zend/site1
/var/www/zend/site2
/var/www/zend/site3

就像我之前说的那样,我在家里和15个人一起使用这个设置.我们的工作设置稍微复杂一点(共享服务器,每个人都有自己的主文件夹),但它在那里工作得很好.我个人更喜欢在子域而不是localhost路径上工作.

希望这可以帮助!

大佬总结

以上是大佬教程为你收集整理的Nginx在子文件夹中有多个站点全部内容,希望文章能够帮你解决Nginx在子文件夹中有多个站点所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: