Как заставить Apache Web Server прослушивать два разных порта?

45

Я хотел бы, чтобы веб-сервер Apache, который я установил дома, прослушивал порт 80 и порт 8080.

Я добавил Listen 8080в httpd.conf и перезапустил службы Apache, но сервер, похоже, не прослушивает 8080. Перфорация в http: // localhost: время 8080 истекло, и не отображается мой index.html, но http: / / localhost отобразит мой index.html.

Как мне заставить его слушать 80 и 8080?

Оуэн
источник
Как вы думаете, почему он не слушает порт 8080? Также может быть полезно опубликовать фрагменты вашей конфигурации.
Дэвид З
1
Перезапускали ли вы Apache после редактирования файла http.conf?
Дана Саня
@ Давид Я обновил свой вопрос, чтобы показать, почему я думаю, что он не слушает 8080. У меня нет доступа к httpd.conf прямо сейчас. @ Дана - да.
Оуэн

Ответы:

63

Стандартная установка Apache Debian будет иметь следующий фрагмент конфигурации:

Слушай 80

<IfModule mod_ssl.c>
    # Виртуальные хосты на основе имени SSL еще не поддерживаются, поэтому нет
    # NameVirtualHost здесь
    Слушай 443
</ IfModule>

Это говорит apache прослушивать порт 80 и прослушивать порт 443, если настроен mod_ssl. В вашем случае вы бы хотели:

Listen 80
Listen 8080

Вам нужно убедиться, что вы запускаете перезапуск, а не операцию перезагрузки на apache, чтобы он обращал внимание на новые директивы Listen. Самое безопасное, что нужно сделать - это остановить Apache, убедиться, что он мертв и запустить его снова.

Если эта конфигурация не работает, проверьте файлы журнала на наличие сообщений об ошибках. Вы можете использовать «netstat -lep --tcp», чтобы увидеть, прослушивает ли что-нибудь порт 8080. Наконец, если все остальное не работает, попробуйте запустить apache под strace, чтобы увидеть, пытается ли он подключиться к этому порту и не работает, но не регистрирует проблему.

Дэвид Пашли
источник
1
В Apache 2.4 где можно найти этот фрагмент конфигурации? Благодарю.
Луис де Соуза
2
Отвечая на мой собственный вопрос: /etc/apache2/ports.conf.
Луис де Соуза
7

Эти ответы являются большими, но они оставляют возможность того, что Оуэн был на самом деле сделал это уже ( «Я добавил Listen 8080») может означать именно то , что это звучит как (т.е. то, что Дэвид предложил).

Если вы уже сделали это и по-прежнему обнаруживаете, что он не работает, убедитесь, что вы правильно настроили свои директивы для каждого субдомена, который у вас может быть, включая стандартный по умолчанию (если он был настроен для прослушивания: 80 сразу после имени).

У вас, вероятно, есть такая директива:

<VirtualHost *:80>
 ServerName michaelsanford.com
 etc…
</VirtualHost>

Вам нужно изменить это на <VirtualHost *:8080>или <VirtualHost *:*>.

msanford
источник
Я подозреваю, что это моя проблема. Я думаю, что есть директива <VirtualHost *: 80>. Я должен проверить это.
Оуэн
1
Если у вас нет виртуального хоста, вам будет предоставлен контент из глобального DocumentRoot, который, вероятно, предоставит вам стандартный файл index.html, страницу индекса каталога, ошибку 404 или 403. Это не будет время ожидания.
Дэвид Пашли
2
Похоже, у вас есть межсетевой экран, который молча отбрасывает пакеты.
msanford
Как оказалось, это была проблема с брандмауэром.
Оуэн
5

Шаг 1

#vi httpd.conf
Listen 80

<IfModule mod_ssl.c>
    # SSL name based virtual hosts are not yet supported, therefore no
    # NameVirtualHost statement here
    Listen 443
</IfModule>

httpd (apache) для прослушивания порта 80 и прослушивания порта 443, если настроен mod_ssl.

Listen 80
Listen 8080

Шаг 2

#su - service httpd restart

Шаг 3

$ netstat -lntp

(Не все процессы могут быть идентифицированы, информация о не принадлежащих процессах не будет показана, вам нужно быть пользователем root, чтобы увидеть все это.)

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:47027               0.0.0.0:*                   LISTEN      -                   
tcp        0      0 192.168.1.1:80              0.0.0.0:*                   LISTEN      -                   
tcp        0      0 192.168.1.1:8080            0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      -                   
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      -                   
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      -                   
tcp        0      0 ::ffff:127.0.0.1:45100      :::*                        LISTEN      3149/java           
tcp        0      0 :::111                      :::*                        LISTEN      -                   
tcp        0      0 :::80                       :::*                        LISTEN      -                   
tcp        0      0 :::57173                    :::*                        LISTEN      3149/java           
tcp        0      0 :::18197                    :::*                        LISTEN      3149/java           
tcp        0      0 :::22                       :::*                        LISTEN      -                   
tcp        0      0 ::1:631                     :::*                        LISTEN      -                   
tcp        0      0 :::40832                    :::*                        LISTEN      3149/java           
tcp        0      0 ::ffff:127.0.0.1:6880       :::*                        LISTEN      3149/java       
Раджу
источник
0

Вы также можете проверить, включен ли SELinux. Конфигурация SELinux по умолчанию может не позволять запускать Apache на нестандартных портах. Вот сайт, который показывает вам, используете ли вы SELinux и как его отключить, если вы не хотите или не используете его возможности. http://www.crypt.gen.nz/selinux/disable_selinux.html


источник
Или вы можете оставить SELinux включенным, если вы работаете в современной системе SELinux и посмотрите, как порты обозначены как порт semanage -l. см. danwalsh.livejournal.com/9275.html, озаглавленный «Я хочу, чтобы мой демон apache прослушивал другой порт, но SELinux препятствует этому, что мне делать?»
оборот
0

Вам может понадобиться настроить сайт на порт 8080, чтобы это работало. Прочитайте документацию по Apache Virtual Hosts . Каждый «сайт» может быть настроен на прием соединений через определенные порты (и IP-адреса и т. Д.). В вашем http.conf есть виртуальный хост, который настроен только для порта 80?

Также вы можете подтвердить, что сервер прослушивает 8080, используя netstat -nlpи ища запись на этом порту.

Дана вменяемая
источник
1
Нет, это не правильно. Если вы хотите, чтобы apache прослушивал порт, вам нужно использовать директиву Listen.
Дэвид Пашли
1
Ну, это может быть несколько правильно - многие люди создают vhosts, такие как <VirtualHost *: 80>, и в этом случае вам необходимо изменить его на <VirtualHost *: *> или создать другого vhost для порта 8080. (Конечно, Директива Listen также требуется)
David Z
@ Дэвид Пашли, автор заявил, что директива Listen уже была добавлена.
Дана Саня
0

Предполагая, что Linux запускается netstat -lntpот имени пользователя root, вы можете видеть, слушает ли Apache 8080 или нет. Это поможет вам определить, связана ли проблема с тем, что apache не слушает или существуют внешние факторы (например, брандмауэр, selinux и т. Д.), Которые приводят к истечению времени ожидания соединения.

Джейсон Тан
источник