Как заставить 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 *:*>.


Я подозреваю, что это моя проблема. Я думаю, что есть директива <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 и т. Д.), Которые приводят к истечению времени ожидания соединения.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.