我的家庭网络上有一个在 ubuntu 9.10 上运行的 cups 服务器。现在我可以通过 访问它192.168.1.101:631
,但是当我尝试通过 访问它时myservername.local:631
,我得到了400 Bad Request
。以下是我当前 的相关部分cupsd.conf
:
ServerName 192.168.1.101
# Only listen for connections from the local machine.
Listen localhost:631
Listen /var/run/cups/cups.sock
# any of the below 'Listen' directives all yield the same result
Listen 192.168.1.101:631
#Listen *:631
#Listen myservername.local:631
# Show shared printers on the local network.
Browsing On
BrowseOrder allow,deny
BrowseAllow all
BrowseLocalProtocols CUPS dnssd
BrowseAddress 192.168.1.255
# Default authentication type, when authentication is required...
DefaultAuthType Basic
# Restrict access to the server...
<Location />
Order deny,allow
Deny from All
Allow from 127.0.0.1
Allow from 192.168.1.*
</Location>
# Restrict access to the admin pages...
<Location /admin>
Order deny,allow
Deny from All
#Allow from 127.0.0.1
#Allow from 192.168.1.*
</Location>
# Restrict access to configuration files...
<Location /admin/conf>
AuthType Default
Require user @SYSTEM
Order deny,allow
Deny from All
#Allow from 127.0.0.1
#Allow from 192.168.1.*
</Location>
我得到以下信息/var/log/cups/error_log
:
E [03/Jan/2010:18:33:41 -0600] 来自“192.168.1.100”的请求使用了无效的主机:字段“myservername.local:631”
我需要做什么才能在和上访问 cups192.168.1.101:631
服务器myservername.local:631
?
答案1
从 Cups 1.3.10 开始,服务器在启动时不会尝试查找自己的主机名。可以通过添加以下代码来恢复旧的行为:
HostNameLookups on
到 cupsd.conf 文件。更多信息请参见Gentoo 错误报告以及CUPS 1.3.10 发行说明。
您可能还想了解ServerName
和ServerAlias
配置指令。请参阅手册页(man cupsd.conf
或在线提供这里) 了解更多信息。
答案2
从您最初的问题来看,您似乎可能尝试过(其中包括)cupsd.conf
包含以下语句的变体:
ServerName 192.168.1.101
# Only listen for connections from the local machine.
Listen localhost:631
Listen /var/run/cups/cups.sock
# any of the below 'Listen' directives all yield the same result
#Listen 192.168.1.101:631
Listen *:631
#Listen myservername.local:631
这一个肯定会有不是成功了,并且很可能阻止了cupsd
守护进程的启动。因为,该Listen localhost:631
语句会将其绑定到127.0.0.1:631
套接字。在其启动的几毫秒后,该Listen *:631
语句会要求绑定到端口 631 上的所有可用套接字:也就是说,至少在您的情况下127.0.0.1:631
(再次)和192.168.1.101:631
。当尝试绑定时第二次到127.0.0.1:631
,cupsd
会发现套接字已被占用,记录错误并退出。
课:如果在中使用多个Listen: ...
指令cupsd.conf
,请确保没有重叠。
答案3
以下 cupsd.conf 文件设置允许我使用 cups 服务器的 IP 或主机名进行打印:
ServerName myservername
ServerAlias *
# Only listen for connections from the local machine.
Listen localhost:631
Listen /var/run/cups/cups.sock
Listen myservername.local:631
# Show shared printers on the local network.
Browsing On
BrowseOrder allow,deny
BrowseAllow all
BrowseLocalProtocols CUPS dnssd
BrowseAddress 192.168.1.255
# Default authentication type, when authentication is required...
DefaultAuthType Basic
# Restrict access to the server...
<Location />
Order deny,allow
Deny from All
Allow from 127.0.0.1
Allow from 192.168.1.*
</Location>
# Restrict access to the admin pages...
<Location /admin>
Order deny,allow
Deny from All
#Allow from 127.0.0.1
#Allow from 192.168.1.*
</Location>
# Restrict access to configuration files...
<Location /admin/conf>
AuthType Default
Require user @SYSTEM
Order deny,allow
Deny from All
#Allow from 127.0.0.1
#Allow from 192.168.1.*
</Location>
显然我错过了那ServerAlias *
句话
答案4
当通过本地环回接口接收发往主机 FQDN 的请求时,CUPS 会拒绝该请求,这是有意为之。
解决方案:不要将主机的 FQDN 解析为 127.0.0.1,而是解析为该 FQDN 的正确外部 IP 地址。