展示比告诉更容易。这来自Apache Tika网络服务:
在该文件的第89行,localhost是硬编码的:
sf.setProviders(providers);
sf.setAddress("http://localhost:" + TikaServerCli.DEFAULT_PORT + "/");
BindingFactoryManager manager = sf.getBus().getExtension(
BindingFactoryManager.class);
这意味着,如果您在本地计算机上运行网络服务,则无法通过http://hostname:9998/tika
或http://hostname.domain.net:9998/tika
访问该网络服务。必须访问 http://localhost:9998/tika
。
我的Java非常生疏,但经过一些谷歌搜索,我添加了几行:
sf.setProviders(providers);
String hostname;
try
{
InetAddress ia = InetAddress.getLocalHost();
hostname = ia.getCanonicalHostName() + ":";
}
catch (Exception e)
{
//I'll do something else with this later
hostname = "http://localhost:";
}
sf.setAddress(hostname + TikaServerCli.DEFAULT_PORT + "/");
BindingFactoryManager manager = sf.getBus().getExtension(
BindingFactoryManager.class);
这允许我通过主机名和FQDN访问它,但不能通过localhost访问它。
是否有一种惯用的方式让Web服务以所有可能的形式进行响应?
我想我可以在运行时计算和或多或少完整的枚举,但似乎可能有更好的方法(?)。
答案 0 :(得分:1)
我提交了一个补丁,它添加了一个可选的命令行参数,并更改了默认行为以侦听所有有效的主机名和IP。 (这种新的默认行为是否仍有待观察。)
更多细节以及补丁可以在Jira票上找到:
答案 1 :(得分:1)
尝试nginx作为前端服务器,它将请求代理到Tika(Jetty)服务器。
在运行的Tika服务器所在的服务器上安装nginx。
编辑nginx配置文件:
vim /etc/nginx/conf.d/default.conf
设定:
# The address or IP on which your Tika server is running. I choose port 9998.
upstream your_domain_or_ip {
server localhost:9998;
}
# The nginx server instance
server {
listen 80;
server_name localhost;
# Pass the request with corrent headers to the Tika server
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://your_domain_or_ip/;
proxy_redirect off;
}
}
答案 2 :(得分:0)
系统有几个网络接口 - 包括硬件(如以太网卡)和软件(如带有特殊IP 127.0.0.1的环回接口)。使用localhost时,您的服务器仅将您的端口绑定到环回接口,因此您只能从该接口上的计算机访问它,并且环回接口在其网络上只有一台计算机,而这是您的计算机本身。
现在,您可以选择要将端口绑定到的所有接口。您可以从绑定接口所连接的网络中的所有计算机访问您的服务器。例如。如果您选择将服务器端口绑定到环回接口和以太网接口,则只能从LAN上的计算机和本地主机访问您的服务器。如果您还有一个WIFI接口,并且您的服务器端口未绑定到它,则WiFi上的计算机将无法访问您的服务器。
现在,如果您想将服务器端口绑定到所有可用接口,以便可以从任何地方访问它,那么您需要指定一个特殊的IP - 0.0.0.0而不是localhost或127.0.0.1。请参阅此内容以了解网络接口 - http://wilddiary.com/list-ip-addresses-in-java/