내가 중복하기 위하여 가상호스트 지시어에 대한 포트 80 및 443?

StackOverflow https://stackoverflow.com/questions/679383

  •  21-08-2019
  •  | 
  •  

문제

내가 길고 복잡하 목록 <VirtualHost> 지시어를 복제하로 별도의 <VirtualHost> 그룹 포트 80 및 443 기 때문에 나가 사용하여 SSL.때마다 업데이트하는 mod_rewrite 규칙을 기억해야 할 두 곳에서 또는 다른 것이 내 응용 프로그램...이 중복이라고 생각하고 있었습니다.는 방법이 있을 결합하거나 별칭 이러한 유일한 차이점은 포트 443 버전을 포함 SSLEngine,SSLCertificateFile 과 같습니다.

나 <Virtualhost> 담은 mod_rewrite 규칙,LocationMatch 규칙,CGI 지침,etc.

또한,내가 할 수 있습니다.htaccess 파일이 있습니다.

도움이 되었습니까?

해결책

공통 규칙을 포함시키기 위해 포함 지시문을 사용할 수는 없습니다. 여기

기사

예를 들어 :

<VirtualHost _default_:80>
    ...
    include conf/common_rule.conf
</VirtualHost>

<VirtualHost _default_:*>
    ...
    include conf/common_rule.conf
</VirtualHost> 

<VirtualHost _default_:443>
    ... #SSL rules
    include conf/common_rule.conf
</VirtualHost>  

다른 팁

단일 가상 호스트 지시문에서 호스트와 포트의 #을 사용할 수 있습니다.

<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 구성 파일에서 많은 복제를 저장할 수 있습니다.

자세한 내용은 여기를 참조하십시오.

https://httpd.apache.org/docs/2.4/mod/mod_macro.html

공통 구성을 별도의 파일에 넣고 두 가상 호스트 세그먼트에 포함시킬 수 있습니다. 예를 들어:

<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 규칙을 선호하지만, 당신에게도 잘 작동해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top