在家里和工作中,我结合使用 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/中创建一个新文件夹。
mkdir -p /var/www/sitename/
该站点及其下面的 PHP 可以通过 sitename.dev 访问。
如前所述,这有一些限制。站点名称必须全部小写,并且不包含空格或特殊字符(包括句点)。其次,它实际上只适用于通过 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 个人一起工作时使用这个设置。我们的工作设置有点复杂(共享服务器,每个人都有自己的主文件夹),但在那里工作得很好。我个人更喜欢处理子域而不是本地主机路径。
希望这可以帮助!