iT邦幫忙

1

Apache 2.4.57僅限域名訪問問題

  • 分享至 

  • xImage

大家好,想請教一下各位,我在我的伺服器上綁定了一個域名
用Apache 2.4.57架設一個網站,但是我不想讓人直接用IP對我的網站進行訪問
想要讓使用者只能用我提供的域名進行訪問
請問我該怎麼設定,網路上的文章都是很久之前的文章了
有的也不對應到當前的版本跟著用的話Apache就沒辦法啟動了
而且很多文章都只說linux的,我用的是windows Server2022架設的
請幫幫我

win895564 iT邦新手 1 級 ‧ 2023-08-01 09:09:05 檢舉
https://misyangs.blogspot.com/2018/05/windows-server-2012-r2-dnsip.html
謝謝你的回答 不過我不是使用IIS
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
Ivan Cheng
iT邦研究生 5 級 ‧ 2023-08-01 08:28:06
最佳解答

啟用 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>
1

首先,你要先有一個能接收所有域名或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>

我要發表回答

立即登入回答