我有一个本地网站叫http://localhost.example.com但现在当我尝试在网络浏览器中打开它时,它会将我重定向到http://www.example.com。以前这个方法有用。我在系统中所做的更改是 AWS CLI 的配置和 Bitbucket 本地配置,以便使用两个不同的帐户。仅此而已。我认为这些更改无关紧要。不是吗?
我提供的所有信息和文件均来自本地工作站。我使用的是 OS X 10.12 (beta 2)。
相关部分/etc/hosts这是:
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
127.0.0.1 localhost.example.com
127.0.0.1 babydiapi.example.com
127.0.0.1 localhost.mi.example.com
127.0.0.1 localhost.qr.example.com
127.0.0.1 localhost.pay.example.com
127.0.0.1 playground.com
127.0.0.1 payments.com
127.0.0.1 localhost.comunidad.example.com
198.58.110.224 web1.example.com
198.58.115.115 web2.example.com
45.56.67.40 web3.example.com
但我得到ping localhost.example.com
了这个:
PING localhost.example.com (104.200.16.137): 56 data bytes
64 bytes from 104.200.16.137: icmp_seq=0 ttl=49 time=166.894 ms
我尝试过ping http://localhost.example.com
但是没有效果:
ping: cannot resolve http://localhost.example.com: Unknown host
我认为这是一种正常行为。
这是我的应用程序的临时服务器。显然不是 localhost。
我读到过某处说我应该使用host localhost.example.com
,但我仍然得到这个:
localhost.example.com has address 104.200.16.137
我使用 Nginx 作为我的本地 Web 服务器,配置如下:
server {
listen 127.0.0.1:80;
listen 127.0.0.1:443 ssl;
server_name localhost.example.com;
server_name_in_redirect off;
error_page 404 /www/error/404.html;
error_page 503 /www/error/404.html;
ssl_certificate /usr/local/etc/nginx/ssl/localhost.crt;
ssl_certificate_key /usr/local/etc/nginx/ssl/localhost.key;
access_log /usr/local/etc/nginx/logs/www.example.com.access.log;
error_log /usr/local/etc/nginx/logs/www.example.com.error.log;
location ~ ^/(.*)/$ {
rewrite ^/(.*)/$ /$1 permanent;
}
location ~* ^.+(\.jpg|\.jpeg|\.gif|\.png|\.js|\.ico|\.woff|\.ttf|\.eot|\.css)$ {
root /www/www.example.com/webroot;
access_log off;
expires 365d;
}
location / {
root /var/www/www.example.com/webroot/;
index index.php index.html index.htm;
if (-f $request_filename) {
break;
}
if (-d $request_filename) {
break;
}
if (-f $request_filename) {
break;
}
# Trigger 503 response on maintenance
set $mantenimiento 0;
if (-f /var/www/www.example.com/.mantenimiento) {
set $mantenimiento 1;
}
if ($remote_addr = 127.0.0.1) {
set $mantenimiento 0;
}
if ($mantenimiento) {
return 503;
}
if (!-f $request_filename) {
rewrite ^/(.+)$ /index.php?url=$1 last;
break;
}
}
location ~ .*\.php[345]?$ {
set $script $uri;
set $path_info "";
if ($uri ~ "^(.+\.php)(/.+)") {
set $script $1;
set $path_info $2;
}
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/www.example.com$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $script;
fastcgi_param PATH_INFO $path_info;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_read_timeout 300;
}
location @error_web {
root /var/www/error;
index 404.html;
}
}
你有什么想法或提示吗?我在网上搜索了大约一周,没有发现任何有用的信息。
答案1
我很想为您测试一下这个但我没有 OSX。
关于这个问题有一些讨论。人们说 hosts 文件中的格式问题(丢失/缺少/不正确的隐藏字符)可能会导致它被忽略。请参阅以下问题并向下滚动到答案和评论。
你也可以研究一下这个疯狂的事情。同样与 hosts 文件的格式化有关。
https://github.com/devopsgroup-io/vagrant-hostmanager/issues/60
你使用什么编辑器?您能否使用 vi、nano 或其他 Unix 编辑器仔细重写整个文件?
不要使用主机或 nslookup、dig 等...它们将绕过 hosts 文件并查询 DNS 服务器。继续尝试,ping localhost.domain.com
直到获得127.0.0.1
。
答案2
我很好奇您的 /etc/hosts 是否不再与 /private/etc/hosts 相同。从我的 10.11.5 机器上,我看到它们应该是硬链接(与ls -li
下面输出中第一个字段中看到的 inode 号相同:
Camerons-MacBook-Air:~ cameron$ ls -li /private/etc/hosts /etc/hosts
12484749 -rw-r--r-- 1 root wheel 247 15 Jul 21:01 /etc/hosts
12484749 -rw-r--r-- 1 root wheel 247 15 Jul 21:01 /private/etc/hosts
对你来说情况仍然如此吗?/etc/hosts 和 /private/etc/hosts 是否引用磁盘上的同一个文件?
在 Linux 主机上,我可能还想知道 /etc/nsswitch.conf,但我发现 OS X 似乎没有这个文件;但我不确定它会用什么来代替。此文件控制解析名称(例如用户名或主机名)的查找方法顺序。
干杯,卡梅伦