为什么我在 ubuntu 9.10 cups 服务器中收到 400 Bad Request?

为什么我在 ubuntu 9.10 cups 服务器中收到 400 Bad Request?

我的家庭网络上有一个在 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 发行说明

您可能还想了解ServerNameServerAlias配置指令。请参阅手册页(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:631cupsd会发现套接字已被占用,记录错误并退出。

课:如果在中使用多个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 地址。

相关内容