Debian
Apache 沒有監聽 443 埠
我已經購買了 SSL,我正在嘗試在瀏覽器上設置它。該埠在路由器中轉發到伺服器,並且我相信 SSL 證書已正確安裝(apache 啟動正常)。
我在 IPtables 防火牆中打開了該埠,但是當我列出監聽的埠時 - 我沒有看到任何監聽埠 443 的內容。
我檢查了我的配置(帶 LAMP 伺服器的預設 debian 7),我的 ports.conf 文件中有以下內容:
# If you just change the port or add more ports here, you will likely also # have to change the VirtualHost statement in # /etc/apache2/sites-enabled/000-default # This is also true if you have upgraded from before 2.2.9-3 (i.e. from # Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and # README.Debian.gz NameVirtualHost *:80 Listen 80 <IfModule mod_ssl.c> # If you add NameVirtualHost *:443 here, you will also have to change # the VirtualHost statement in /etc/apache2/sites-available/default-ssl # to <VirtualHost *:443> # Server Name Indication for SSL named virtual hosts is currently not # supported by MSIE on Windows XP. NameVirtualHost *:443 Listen 443 </IfModule> <IfModule mod_gnutls.c> NameVirtualHost *:443 Listen 443 </IfModule>
在啟用站點的情況下,我有一個名為 default-ssl 的文件(它很長,我只會添加主機數據,而不是整個 ssl 文件選項,除非有人認為它可以提供幫助)
<IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin webmaster@localhost DocumentRoot /var/www <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride All # Order allow,deny # allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined # SSL Engine Switch: # Enable/Disable SSL for this virtual host. SSLEngine on # A self-signed (snakeoil) certificate can be created by installing # the ssl-cert package. See # /usr/share/doc/apache2.2-common/README.Debian.gz for more info. # If both key and certificate are stored in the same file, only the # SSLCertificateFile directive is needed. SSLCertificateFile /etc/ssl/dev.webmark.co.il/dev_webmark_co_il.pem SSLCertificateKeyFile /etc/ssl/dev.webmark.co.il/dev.webmark.co.il.key # Server Certificate Chain: # Point SSLCertificateChainFile at a file containing the # concatenation of PEM encoded CA certificates which form the # certificate chain for the server certificate. Alternatively # the referenced file can be the same as SSLCertificateFile # when the CA certificates are directly appended to the server # certificate for convinience. #SSLCertificateChainFile /etc/apache2/ssl.crt/server-ca.crt # Certificate Authority (CA): # Set the CA certificate verification path where to find CA # certificates for client authentication or alternatively one # huge file containing all of them (file must be PEM encoded) # Note: Inside SSLCACertificatePath you need hash symlinks # to point to the certificate files. Use the provided
所以我為很長的文章道歉,只是認為這是相關資訊。
我認為 ports.conf 文件啟用了 443 上的偵聽器,但我不知道為什麼它沒有。
當我列出監聽的埠時:
netstat -a | egrep 'Proto|LISTEN'
我明白了
Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 10.0.0.10:mysql *:* LISTEN tcp 0 0 *:35563 *:* LISTEN tcp 0 0 *:sunrpc *:* LISTEN tcp 0 0 localhost:61619 *:* LISTEN tcp 0 0 *:61620 *:* LISTEN tcp 0 0 *:ftp *:* LISTEN tcp 0 0 *:ssh *:* LISTEN tcp 0 0 10.0.0.10:8888 *:* LISTEN tcp 0 0 localhost:smtp *:* LISTEN tcp 0 0 *:27017 *:* LISTEN tcp6 0 0 [::]:sunrpc [::]:* LISTEN tcp6 0 0 [::]:http [::]:* LISTEN tcp6 0 0 [::]:ssh [::]:* LISTEN tcp6 0 0 localhost:smtp [::]:* LISTEN tcp6 0 0 [::]:https [::]:* LISTEN tcp6 0 0 [::]:55644 [::]:* LISTEN Proto RefCnt Flags Type State I-Node Path unix 2 [ ACC ] STREAM LISTENING 7400 /tmp/mongodb-27017.so ck unix 2 [ ACC ] STREAM LISTENING 7444 /var/run/dbus/system_ bus_socket unix 2 [ ACC ] STREAM LISTENING 7215 /var/run/rpcbind.sock unix 2 [ ACC ] SEQPACKET LISTENING 3434 /run/udev/control unix 2 [ ACC ] STREAM LISTENING 7351 /var/run/acpid.socket unix 2 [ ACC ] STREAM LISTENING 7624 /var/run/mysqld/mysql
我很確定這個條件是真的。我希望我提供了所有相關資訊,而不是太多。感謝您花時間閱讀本文。嚴
編輯 以確保 mod_ssl 正在執行 - 我使用
apache2ctl -M
結果是:
Loaded Modules: core_module (static) log_config_module (static) logio_module (static) version_module (static) mpm_prefork_module (static) http_module (static) so_module (static) alias_module (shared) auth_basic_module (shared) authn_file_module (shared) authz_default_module (shared) authz_groupfile_module (shared) authz_host_module (shared) authz_user_module (shared) autoindex_module (shared) cgi_module (shared) deflate_module (shared) dir_module (shared) env_module (shared) headers_module (shared) mime_module (shared) ssl_module (shared) negotiation_module (shared) php5_module (shared) reqtimeout_module (shared) rewrite_module (shared) setenvif_module (shared) status_module (shared) Syntax OK
/編輯
埠 443 是 HTTPS。從您的
netstat
輸出:tcp6 0 0 [::]:https [::]:* LISTEN
很明顯,一個程序正在監聽 443 埠。要確認上面是否是 Apache (httpd) 程序,以 root 身份執行命令很重要。不推薦使用
ss
,而是netstat
使用:# ss -tlnp
你啟用了
mod_ssl
嗎?由於您正在執行 Debian,因此這是執行此操作的方法(以 root 身份執行,或通過 sudo):a2enmod ssl