Як змусити веб-сервер Apache прослуховувати на двох різних портах?


45

Мені б хотілося, щоб веб-сервер Apache, який я встановив вдома, слухав порт 80 і порт 8080.

Я додав Listen 8080до httpd.conf і перезапустив служби Apache, але сервер, здається, не слухає 8080. Пробивання в http: // localhost: 8080 разів вичерпано та не відображає мій index.html, але http: / / localhost відобразить мій index.html.

Як змусити його слухати 80 та 8080?


Як ви думаєте, чому він не слухає порт 8080? Також може бути корисно розмістити фрагменти вашої конфігурації.
David Z

1
Ви перезапустили Apache після редагування http.conf?
Dana Sane

@David Я оновив своє запитання, щоб показати, чому я думаю, що його не слухають на 8080. Не маю доступу до httpd.conf прямо зараз. @Dana - так.
Оуен

Відповіді:


63

Стандартна установка Debian апаша матиме такий фрагмент конфігурації:

Слухайте 80

<IfModule mod_ssl.c>
    # Віртуальні хости на основі імені SSL ще не підтримуються, тому ні
    # Ім'яVirtualHost тут
    Слухай 443
</IfModule>

Це говорить апаше прослуховувати порт 80 і слухати порт 443, якщо налаштований mod_ssl. У вашому випадку ви хочете:

Listen 80
Listen 8080

Вам потрібно переконатися, що ви запустили перезапуск, а не операцію перезавантаження на apache, щоб приділити будь-яку увагу новим директивам про слухання. Найбезпечніше - це зупинити апаш, переконатися, що він мертвий, і запустити його заново.

Якщо ця конфігурація не працює, перевірте файли журналу на наявність повідомлень про помилки. Ви можете скористатися "netstat -lep --tcp", щоб побачити, чи є що-небудь прослуховування на порту 8080. Нарешті, якщо все інше не працює, спробуйте запустити apache під напругою, щоб побачити, чи намагається він прив’язатись до цього порту і не вдалося, але не реєстрація проблеми.


1
У Apache 2.4, де можна знайти цей фрагмент конфігурації? Дякую.
Luís de Sousa

2
Відповідаючи на мій власний питання: /etc/apache2/ports.conf.
Luís de Sousa

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 заважає це, Що мені робити?»
rev

0

Для цього може знадобитися налаштувати сайт 8080 для роботи. Прочитайте документацію для віртуальних хостів Apache . Кожен 'сайт' може бути налаштований для прийому з'єднань на конкретних портах (і ip, тощо). Чи є у вас http.conf віртуальний хост, налаштований лише для порту 80?

Крім того, ви можете підтвердити, що сервер слухає 8080 за допомогою netstat -nlpта шукає запис на цьому порту.


1
Ні, це неправильно. Якщо ви хочете, щоб apache слухав порт, вам потрібно скористатися директивою Listen.
Девід Пашлі


1
Ну, це може бути дещо правильно - багато людей створюють vhosts типу <VirtualHost *: 80>, і в цьому випадку вам потрібно буде змінити його на <VirtualHost *: *> або створити інший vhost для порту 8080. (Звичайно, Потрібна також директива про прослуховування)
David Z

@David Pashley, Автор заявив, що директива про слухання вже додана.
Dana Sane

0

Якщо припустимо, що Linux працює netstat -lntpяк root, як ви бачите, слухає апарат 8080 чи ні. Це допоможе вам визначити, чи проблема не в тому, що апаш не прослуховує або чи є зовнішні фактори (наприклад, брандмауер, selinux тощо) для апашшю, що робить час вимкнення з'єднання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.