내가 중복하기 위하여 가상호스트 지시어에 대한 포트 80 및 443?
-
21-08-2019 - |
문제
내가 길고 복잡하 목록 <VirtualHost> 지시어를 복제하로 별도의 <VirtualHost> 그룹 포트 80 및 443 기 때문에 나가 사용하여 SSL.때마다 업데이트하는 mod_rewrite 규칙을 기억해야 할 두 곳에서 또는 다른 것이 내 응용 프로그램...이 중복이라고 생각하고 있었습니다.는 방법이 있을 결합하거나 별칭 이러한 유일한 차이점은 포트 443 버전을 포함 SSLEngine,SSLCertificateFile 과 같습니다.
나 <Virtualhost> 담은 mod_rewrite 규칙,LocationMatch 규칙,CGI 지침,etc.
또한,내가 할 수 있습니다.htaccess 파일이 있습니다.
다른 팁
단일 가상 호스트 지시문에서 호스트와 포트의 #을 사용할 수 있습니다.
<VirtualHost addr[:port] [addr[:port]] ...> ... </VirtualHost>
제 경우에는 사용했습니다.
<VirtualHost *:80 *:443>
ServerName loop.lk
....
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/local.crt
</VirtualHost>
죄송하는 최대 범프는 오래된 포럼이지만,을 돕기 위해 다른 구글 직원들이 밖에 나가고 싶었을 공유하는 방법을 다룬다:
나는 부부의 가상호스트에 나 localhost,말: localhost
, foo.com
, bar.com
이 localhost 사이트에서 내 컴퓨터(macosx)나는 멀리 얻을 수있는 자체 서명된 인증서를 사용하고 따라서 ssl-부분은 동일한에 대한 모든 가상호스트의...
내가 무엇을 했습니다:
내가 만든 디렉토리 /etc/apache2/extra/vhosts/
.
성 /etc/apache2/extra/vhosts/localhost.conf
:
ServerName localhost
DocumentRoot "/www/localhost"
<Directory /www/localhost>
Require all granted
</Directory>
ErrorLog "/var/log/apache2/localhost.error_log"
CustomLog "/var/log/apache2/localhost.access_log" common
A /etc/apache2/extra/vhosts/foo.conf
:
ServerName foo.com
DocumentRoot "/www/foo.com"
<Directory /www/foo.com>
Require all granted
</Directory>
ErrorLog "/var/log/apache2/foo.com.error_log"
CustomLog "/var/log/apache2/foo.com.access_log" common
A /etc/apache2/extra/vhosts/bar.conf
:
ServerName bar.com
DocumentRoot "/www/bar.com"
<Directory /www/bar.com>
Require all granted
</Directory>
ErrorLog "/var/log/apache2/bar.com.error_log"
CustomLog "/var/log/apache2/bar.com.access_log" common
그리고 마지막으로 /etc/apache2/extra/vhosts/ssl.conf
:
SSLEngine on
SSLCertificateFile "/etc/apache2/ssl/server.crt"
SSLCertificateKeyFile "/etc/apache2/ssl/server.key"
고서 /etc/apache2/extra/httpd-vhosts.conf
:
<VirtualHost *:80>
Include /etc/apache2/extra/vhosts/localhost.conf
</VirtualHost>
<VirtualHost *:443>
Include /etc/apache2/extra/vhosts/localhost.conf
Include /etc/apache2/extra/vhosts/ssl.conf
</VirtualHost>
<VirtualHost *:80>
Include /etc/apache2/extra/vhosts/foo.conf
</VirtualHost>
<VirtualHost *:443>
Include /etc/apache2/extra/vhosts/foo.conf
Include /etc/apache2/extra/vhosts/ssl.conf
</VirtualHost>
<VirtualHost *:80>
Include /etc/apache2/extra/vhosts/bar.conf
</VirtualHost>
<VirtualHost *:443>
Include /etc/apache2/extra/vhosts/bar.conf
Include /etc/apache2/extra/vhosts/ssl.conf
</VirtualHost>
사용하는 대신 또 다른 옵션 Include
사용 중입니다 Macro
(따라서 모든 것을 하나의 파일로 유지할 수 있습니다).
먼저 매크로 모듈을 활성화합니다.
a2enmod macro
그런 다음 공유 물건을 매크로에 넣습니다 use
가상 호스트에서 :
<Macro SharedStuff>
ServerName example.com
ServerAdmin example@example.com
<DocumentRoot /var/www/example>
...
</DocumentRoot>
</Macro>
<VirtualHost *:80>
Use SharedStuff
</VirtualHost>
<VirtualHost *:443>
Use SharedStuff
SSLEngine On
SSLProtocol All -SSLv2 -SSLv3
...
</VirtualHost>
매크로는 또한 매개 변수를 가져 와서 포함 된 다른 파일에서 정의 될 수 있습니다. 따라서 기능과 비슷한 기능을 사용하고 Apache 구성 파일에서 많은 복제를 저장할 수 있습니다.
자세한 내용은 여기를 참조하십시오.
공통 구성을 별도의 파일에 넣고 두 가상 호스트 세그먼트에 포함시킬 수 있습니다. 예를 들어:
<VirtualHost 192.168.1.2:80>
Include conf/common.conf
</VirtualHost>
<VirtualHost 192.168.1.2:443>
Include conf/common.conf
(put your ssl specific cofiguration stuff here ...)
</VirtualHost>
또한 자체가 아닌 컨테이너 내에 공통 지침을 지정할 수도 있습니다. 그것이 제가하는 일입니다. 주로 서버 레벨 대신 디렉토리 수준에서 mod_rewrite 규칙을 선호하지만, 당신에게도 잘 작동해야합니다.