내 서버 정보는
Server version: Apache/2.4.6 (CentOS)
Server built: Nov 19 2015 21:43:13
동일한 서버에서 호스팅되는 biz.example.com 및 pin.example.com이라는 두 개의 다른 사이트에 대한 가상 호스팅을 구성하려고 합니다. "var/www/html/" 아래에는 "biz" 및 "pin"이라는 두 개의 서로 다른 폴더가 있으며, 여기에는 위에서 언급한 두 웹사이트에 대한 중요한 프로젝트 파일이 포함되어 있습니다. 아래와 같이 구성하려고 합니다.
/etc/hosts 아래 구성에서
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
xxx.xxx.xxx.xxx biz.example.com
xxx.xxx.xxx.xxx pin.example.com
xxx.xxx.xxx.xxx를 서버 IP 주소로 바꾸세요.
/etc/httpd/conf/httpd.conf에서
IncludeOptional sites-enabled/*.conf
이제 /etc/httpd/sites-available 아래에 biz.conf 및 pin.conf 파일이 있습니다. 또한 다음 명령을 사용하여 사이트 활성화 폴더를 가리키는 biz.conf 및 pin.conf 파일 2개가 있는 /etc/httpd 아래에 사이트 활성화 폴더를 활성화했습니다.
ln -s /etc/httpd/sites-available/biz.conf /etc/httpd/sites-enabled/biz.conf
ln -s /etc/httpd/sites-available/pin.conf /etc/httpd/sites-enabled/pin.conf
biz.conf에는 다음 내용이 있습니다
<VirtualHost *:80>
ServerName http://biz.example.com/
ServerAlias http://biz.example.com/
DocumentRoot "/var/www/html/biz"
<directory "/var/www/html/biz">
Options Indexes FollowSymLinks
AllowOverride all
Order Deny,Allow
Allow from 127.0.0.1
</directory>
</VirtualHost>
pin.conf 파일의 구성은 다음과 같이 언급됩니다.
<VirtualHost *:80>
ServerName http://pin.example.com/
ServerAlias http://pin.example.com/
DocumentRoot "/var/www/html/pin"
<directory "/var/www/html/pin">
Options Indexes FollowSymLinks
AllowOverride all
Order Deny,Allow
Allow from 127.0.0.1
</directory>
</VirtualHost>
이 설정에서 액세스하려고 하면http://biz.example.com/, 올바른 웹사이트(비즈니스 웹사이트)가 로드 중입니다. 하지만 내가 접근하려고 하면http://pin.example.com/을 클릭한 다음 고정된 웹사이트 대신 비즈니스 웹사이트도 로드합니다. 여러 구성을 함께 사용할 수는 없습니다.
또한 biz.conf 및 pin.conf의 더미 구성을 단일 파일 biz.conf로 병합하려고 시도했지만 제대로 작동하지 않았습니다.
답변1
답변:
1) ServerName 및 ServerAlias의 후행 슬래시를 제거해야 합니다.
2) 여기서 ServerAlias를 삭제할 수 있으며 ServerName과 ServerAlias는 모두 동일합니다.
답변2
경로에서 큰따옴표 제거
DocumentRoot /var/www/html/pin
<directory /var/www/html/pin>
답변3
이 설정에서 액세스하려고 하면http://biz.example.com/, 올바른 웹사이트(비즈니스 웹사이트)가 로드 중입니다. 하지만 내가 접근하려고 하면http://pin.example.com/을 클릭한 다음 고정된 웹사이트 대신 비즈니스 웹사이트도 로드합니다.
ServerName
이는 지시문 과의 불일치(구문 오류) 로 인해 발생하며 ServerAlias
, 이 경우 첫 번째 정의된 지시문이 VirtualHost
모든 요청을 받습니다.
동작은 매우 유사한 구성을 사용하여 설명서에 설명되어 있습니다.
단일 IP 주소에서 여러 이름 기반 웹사이트 실행(httpd.apache.org/docs/2.4/vhosts/examples.html)
# Ensure that Apache listens on port 80 Listen 80 <VirtualHost *:80> DocumentRoot "/www/example1" ServerName www.example.com # Other directives here </VirtualHost> <VirtualHost *:80> DocumentRoot "/www/example2" ServerName www.example.org # Other directives here </VirtualHost>
별표는 모든 주소와 일치하므로 기본 서버는 요청을 처리하지 않습니다. 가상 호스트는
ServerName www.example.com
구성 파일에서 첫 번째 순위를 가지므로 우선 순위가 가장 높으며 다음과 같이 볼 수 있습니다.기본또는기초적인섬기는 사람. 즉, 지정된 지시어 중 하나와 일치하지 않는 요청이 수신되면ServerName
요청은 해당 지시어에 의해 먼저 처리됩니다<VirtualHost>
.
해결책:
접두사와 후행 슬래시가 없어야 합니다.
ServerName
즉 ,http://
ServerName biz.example.com
그리고
ServerName pin.example.com
ServerAlias
동일한 값을 가지므로 제거할 수 있습니다.ServerName
<Directory>
</Directory>
대문자로 시작해야 합니다이전 Apache 2.2 액세스 제어 구문은 새로운 Apache 2.4
Require
구문으로 변경되어야 합니다.Order Deny,Allow Allow from 127.0.0.1
로 교체해야합니다
Require local
바라보다