作者GALINE (天真可爱CQD)
看板java
标题Re: [问题] 请问如何抓取Server host name
时间Fri Jul 27 17:09:20 2012
: 抱歉,我事情说得不够清楚
: 我想要抓一个这 Web server 所在网域的资讯作辨认,才能知道我这网站是架在哪
: 因为我这网站之後会同时架在不同网域上
: 如 http://localhost/ 就抓localhost
: http://www.xxx.com/ 就抓 www.xxx.com
: 因为 ip 可能会因搬迁伺服器而不一样,但是 DNS 不太会变(注册完就放着)
: 所以我想以DNS值为主,应该是Chikei前辈说的server服务的host name
我有点好奇你抓这个的目的是什麽...XD
到目前看起来,我其实会比较建议你写个设定档存网址
: 以GALINE前辈的方法在DNS的资讯写在网卡内的机器是没问题的
: 因为此时DNS下的host name就等於server服务的host name
: 虽然在本机跑时,他抓的不是localhost,debug程式时会有些麻烦就是了...
: 可是我之後架站的伺服器都是向外租的,他们都是虚拟伺服器,这招就没用了
: 刚刚试了才发现不行
叫前辈感觉好怪 XD
其实「网卡」是不知道,也不会/无法去管 domain name 的。
InetAddress.getHostName() 後面还是得跟作业系统/DNS 要 Domain name
也就是说,会拿 IP 问作业系统/DNS「这个IP的 Domain Name 是什麽」
But,实际上你可以让多个 Domain Name 对应到同一台机器
这也就是虚拟主机的作法
十个,甚至一百个网站,放在同一台机器上共享资源与 IP
而且有一百个,甚至更多的 domain name 指向到这台机器上
此时你无法依这台机器的 IP 取得你的 domain...
(这部份可以去找一下 DNS 正解反解的说明)
而对机器来说,要如何知道连上机器的使用者要看哪个网站呢?
答案是 http request header 中的 host 栏位,伺服器会依此去查设定档
对 apache 来说,是 httpd.conf 中的 VirtualHost
对 tomcat 来说,是 web.xml 中的 host
当然,这个机制要 user 连上的时候才会走一次
好,现在问题来了。你的程式放在一台同时有几百个网址指到的机器上
什麽能决定你的网站程式会对应到哪个 domain 呢?
答案是伺服器的 virtual host 设定,以及你去注册了哪个网址
我不知道 servlet 有没有办法取得虚拟主机的 vhost 设定
不过,我想你的程式应该没办法自动知道你去注册了哪个网址...
所以你要不要考虑写在设定档里面[汗]
--
莉娜用魔法爆破进入屋内。
劫犯从另一个房间里出现,大叫道︰「你是谁!」
莉娜︰「我是个可疑的女人!」
劫犯无言以对。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 60.244.113.189
※ 编辑: GALINE 来自: 60.244.113.189 (07/27 17:10)
1F:推 PsMonkey:终究...... XD 07/27 17:29
2F:推 powerup:所以还是版主的方式最好XDD 原本想说改设定档很麻烦 07/27 18:42
3F:→ powerup:因为同时架在3个不同伺服器上,就要有3个不同的设定档 07/27 18:44
4F:→ powerup:我只是想写个万用的,懒得改来改去而已(汗 07/27 18:46
5F:推 powerup:我要抓DNS是为了同步用,因为伺服器有挡3306 port 07/27 18:49
6F:→ powerup:所以透过servlet api来作资料库同步 07/27 18:51
7F:推 powerup:我要先知道自身的DNS,才能去同步其他台伺服器 07/27 18:58
8F:→ powerup:不然会同步到自己,造成无穷回圈 07/27 19:00