Почему я получаю 400 Bad Request на сервере ubuntu 9.10 cups?

У меня есть сервер чашек, работающий на Ubuntu 9.10 в моей домашней сети. Прямо сейчас я могу получить к нему доступ в 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" с использованием недопустимого поля Host: myservername.local:631

Что мне нужно сделать, чтобы получить доступ к серверу чашек на обоих 192.168.1.101:631 а также myservername.local:631?

5 ответов

Решение

Начиная с Кубка 1.3.10, сервер не пытается искать свое имя хоста при запуске. Старое поведение можно восстановить, добавив

HostNameLookups on

В ваш файл cupsd.conf. Дополнительная информация доступна в этом отчете об ошибках Gentoo, а также в заметках о выпуске CUPS 1.3.10.

Вы также можете посмотреть в ServerName а также ServerAlias директивы конфигурации. Смотрите справочную страницу (man cupsd.conf или доступны онлайн здесь) для получения дополнительной информации.

Из вашего первоначального вопроса видно, что вы, возможно, пытались (среди прочего) 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убедитесь, что у вас нет перекрытия.

Следующие настройки файла cupsd.conf позволили мне печатать, используя либо IP, либо имя хоста сервера cups:

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 * линия

Это преднамеренное поведение, когда CUPS отклоняет запросы, адресованные полному доменному имени хоста при получении через локальный интерфейс обратной связи.

Решение: не разрешайте полное доменное имя хоста разрешать 127.0.0.1, а вместо этого используйте правильный внешний IP-адрес для этого полного доменного имени.

Включение печати с использованием CUPS с Mac - Как мой Mac теперь печатает на принтере, подключенном к машине с Ubuntu 9.10!

После МНОГО ошибок, я выполнил эти шаги, и принтер, наконец, начал работать, используя CUPS и настройку выше. Как относительный новичок к Ubuntu и Linux, я не знаю, какие из этих шагов были волшебными, которые работали. Вполне вероятно, что некоторые из этих шагов можно изменить или пропустить, но они сработали для меня и, надеюсь, также для вас.

Принтер, подключенный к параллельному порту на компьютере с Linux, был установлен, запущен и настроен для совместного использования по локальной сети из CUPS ( http://localhost:631/, введенный в адресную строку Firefox).

На машине Linux я запустил ifconfig из приложения терминала. узнать локальный IP-адрес (начинается с 192.168.xx.x) (у вашего xx.x будут разные номера).

В адресной строке программы Mac Safari я перешел по URL-адресу CUPS-порта Linux-машины 631 (192.168.xx.x:631), где xx.x - это числа для локального адреса, обнаруженного с помощью ifconfig выше.

Это подняло систему CUPS на машине Linux (которая отображалась на экране машины Mac).

Затем я перешел на вкладку принтеры на компьютере с Linux (через Safari на Mac) и скопировал местоположение принтера в буфер обмена ( http://192.168.xx.x:631/printers/Hewlett-Packard-HP-LaserJet-1100).

Затем я открыл порт 631 на компьютере Mac ( http://localhost:631/), который вызывает систему CUPS на Mac. (Если он не запускает систему Mac CUPS, посмотрите в другом месте, чтобы выяснить это).

Я пошел, чтобы добавить принтер в системе Mac CUPS.

На Mac я дал добавленному принтеру имя HP_LaserJet_1100 и "вырезал и вставил местоположение в поля местоположения и описания.

Для устройства я использовал IPP или протокол интернет-печати (http).

Для Device URI я снова вставил местоположение, скопированное с машины Linux.

Я выбрал подходящую марку и модель для водителя на следующем экране.

Работал! Надеюсь, это сэкономит кому-то еще час или два, которые понадобились мне, чтобы заправить иглу

Другие вопросы по тегам