啟用 Apache 的虛擬主機設定,您可以參考這篇文章。
使用者透過 IP 瀏覽您的網站時會自動跳回設定的ServerName。
<VirtualHost *:80>
ServerName your_domain_name
Redirect permanent / https://your_domain_name/
</VirtualHost>
<VirtualHost *:443>
ServerAdmin admin@your_domain_name
ServerName your_domain_name
DocumentRoot /var/www/your_domain_name
<Directory /var/www/your_domain_name>
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/your_domain_name-error.log
CustomLog ${APACHE_LOG_DIR}/your_domain_name-access.log combined
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/your_domain_name.crt
SSLCertificateKeyFile /etc/apache2/ssl/your_domain_name.key
SSLCertificateChainFile /etc/apache2/ssl/SectigoRSADomainValidationSecureServerCA.crt
</VirtualHost>
若不使用 HTTPS 可改成
<VirtualHost *:80>
ServerAdmin admin@your_domain_name
ServerName your_domain_name
DocumentRoot /var/www/your_domain_name
<Directory /var/www/your_domain_name>
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/your_domain_name-error.log
CustomLog ${APACHE_LOG_DIR}/your_domain_name-access.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName your_domain_name
Redirect permanent / https://your_domain_name/
</VirtualHost>
<VirtualHost *:443>
ServerAdmin admin@your_domain_name
ServerName your_domain_name
DocumentRoot /var/www/your_domain_name
<Directory /var/www/your_domain_name>
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/your_domain_name-error.log
CustomLog ${APACHE_LOG_DIR}/your_domain_name-access.log combined
</VirtualHost>
這個我試過設定在httpd-vhosts.conf 會變成不管用IP或者用域名進行訪問都訪問不進來了
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
ServerName mydnsname
ServerAlias mydnsname
DocumentRoot "${INSTALL_DIR}/htocs"
ErrorLog "logs/mydnsname.log"
CustomLog "logs/mydnsname.log" common
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/?(.*)$ https://%{SERVER_NAME}/$1 [L,R]
<Directory "${INSTALL_DIR}/htocs">
Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
我本身有設定一個80自動跳轉443的設定 這個是有效的
只不過用IP訪問也訪的進來就是了
OPENSSL的部分是設定在httpd-ssl.conf
這一部分在httpd-ssl.conf都有正確打開跟key正確的檔案路徑了
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/your_domain_name.crt
SSLCertificateKeyFile /etc/apache2/ssl/your_domain_name.key
SSLCertificateChainFile /etc/apache2/ssl/SectigoRSADomainValidationSecureS
最後是這樣弄好的
其實到最後我還是不明白為什麼這樣可以
因為我這裡只有寫出我的IP
並沒有寫出我的域名 但是他卻可以用我的域名解析出來
不過還是謝謝你們的回答❤️
2023/08/02
後來我發現了我在httpd-ssl.conf裡面有設定域名
所以他才能解析出來
#限制域名訪問設定+80自動跳轉443
<VirtualHost *:80>
ServerName MYIP
<Location />
Order Allow,Deny
Deny from all
</Location>
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/?(.*)$ https://%{SERVER_NAME}/$1 [L,R]
</VirtualHost>
<VirtualHost *:443>
ServerName MYIP
SSLEngine On
SSLCertificateFile "${SRVROOT}/conf/ssl/kcertificate.crt"
SSLCertificateKeyFile "${SRVROOT}/conf/ssl/kprivate.key"
SSLCertificateChainFile "${SRVROOT}/conf/ssl/kca_bundle.crt"
<Location />
Order Allow,Deny
Deny from all
</Location>
</VirtualHost>
首先,你要先有一個能接收所有域名或IP的設定值
<VirtualHost *:80>
DocumentRoot "/alidata/www" (這邊給對應的路徑)
ServerName xxx.xxx.xxx.xxx (這邊給伺服器的IP值)
ServerAlias *
<Location /alidata/www>
Order Allow,Deny
Allow from all
</Location>
</VirtualHost>
裏面的路徑指向一個不存在或是一個單純的html頁即可
這樣子的話,無論是IP還是你其它未指定的域名。
都會統一去這個地方。
你也可以直接修改 Location 內的設定給它直接403也行。
但要記得給明確的路徑就是了。要不然找不到路徑會報錯的。
之後再接你要設定的域名即可。有人已經給你相關設定了。就不再重覆。
另外,可以利用 apache -t 或是 httpd -t (依您的執行檔名而定) 來檢查您的設定值是否正確。
如有錯誤,會比較容易看到什麼錯誤。
AH00526: Syntax error on line 47 of C:/Apache24/conf/extra/httpd-vhosts.conf:
Invalid command 'Order', perhaps misspelled or defined by a module not included in the server configuration
他指出Order指令是無效的
好像是
#LoadModule access_compat_module modules/mod_access_compat.so
我沒有打開的樣子我試試看唷
真的是mod_access_compat.so沒有打開的關係
最後是這樣弄好的
其實到最後我還是不明白為什麼這樣可以
因為我這裡只有寫出我的IP
並沒有寫出我的域名 但是他卻可以用我的域名解析出來
不過還是謝謝你們的回答❤️
2023/08/02
後來我發現了我在httpd-ssl.conf裡面有設定域名
所以他才能解析出來
#限制域名訪問設定+80自動跳轉443
<VirtualHost *:80>
ServerName MYIP
<Location />
Order Allow,Deny
Deny from all
</Location>
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/?(.*)$ https://%{SERVER_NAME}/$1 [L,R]
</VirtualHost>
<VirtualHost *:443>
ServerName MYIP
SSLEngine On
SSLCertificateFile "${SRVROOT}/conf/ssl/kcertificate.crt"
SSLCertificateKeyFile "${SRVROOT}/conf/ssl/kprivate.key"
SSLCertificateChainFile "${SRVROOT}/conf/ssl/kca_bundle.crt"
<Location />
Order Allow,Deny
Deny from all
</Location>
</VirtualHost>