Debian

如何在同一域中為多個埠配置“https”?

  • July 7, 2020

我有一個網站(apache web 伺服器,ubuntu 14.04)設置http://example.com並配置了埠 1996 和 1980。

這些連結適用於http

http://example.com/myproject
http://example.com:1996/
http://example.com:1980/

然後我安裝了 SSL 證書並將此伺服器配置為使用https.

但是這些連結不起作用

https://example.com:1996 
https://example.com:1980

如何https在同一個域中配置多個埠?

預設配置:

<VirtualHost *:80>
              ServerAdmin webmaster@localhost
       DocumentRoot /var/www/html
       ErrorLog ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<VirtualHost *:443>

       ServerAdmin webmaster@localhost
       DocumentRoot /var/www/html
       ErrorLog ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined
       ServerName example.com
       SSLEngine on
       SSLCertificateFile /home/ubuntu/ssl_cert/signed_cert.crt
       SSLCertificateKeyFile /home/ubuntu/ssl_cert/server.key

</VirtualHost>

埠.conf:

Listen 80

<IfModule ssl_module>
   Listen 443
</IfModule>

<IfModule mod_gnutls.c>
   Listen 443
</IfModule>

編輯:調試使用者設置,發現netstat已經有一個使用 1996/TCP 的程序:

netstat -nlp | grep 1996
tcp 0 0 0.0.0.0:1996 0.0.0.0:* LISTEN 4729/python

所以配置範例,改為1997/TCP。


Apache/mod_ssl必須被告知 1997/TCP 和 1980/TCP 是 HTTPS 埠。預設情況下 443/TCP 是已知的,但任何其他 TLS 感知 TCP 埠都必須添加到配置中。

否則,任何非 443/TCP 埠將僅作為支持 HTTP 的埠處理。

例如,在 CentOS 中,您必須/etc/httpd/conf.d/ssl.conf在 Debian/Ubuntu 中添加/etc/apache2/ports.conf以下行:

Listen 1997 https
Listen 1980 https

您還必須在相應的虛擬主機中定義埠:

<VirtualHost *:1997>
Servername example.com
....
</VirtualHost>

<VirtualHost *:1980>
Servername example.com
....
</VirtualHost>

它也鮮為人知,您可以執行以下操作(僅作為範例,如果您仍然擁有使用 :*443 的虛擬主機,請不要使用它):

<VirtualHost *:443 *:1980>
Servername example.com
....
</VirtualHost>

編輯配置文件後,您必須重新啟動 Apache。在 Debian/Ubuntu 中,它會重新啟動:

sudo service apache2 restart

Apache - 綁定到地址和埠

使用 Listen 指定協議

對於大多數配置,Listen 的可選的第二個協議參數不是必需的。如果未指定,https 是埠 443 的預設值,http 是所有其他埠的預設值。該協議用於確定應由哪個模組處理請求,並使用 AcceptFilter 指令應用特定於協議的優化。

如果您在非標準埠上執行,您只需要設置協議。例如,在埠 8443 上執行 https 站點:

聽 192.170.2.1:8443 https

重要提示: 每個埠只能配置一個監聽線路/指令。如果您已經有這些埠的 Listen 指令,您可以評論它們或在它們前面添加 https。否則,在啟動 Apache 時,您將有一個“地址已在使用中”

最後一段的 TLDR:你已經在 apache2.conf 中複製了至少 1996 年的副本,將其取出。(不,它正在被另一個正在執行的服務使用)

**第二個注意事項:**不要使用您可能在其他正在執行的服務上配置的埠。

引用自:https://unix.stackexchange.com/questions/503381