레이블이 apache인 게시물을 표시합니다. 모든 게시물 표시
레이블이 apache인 게시물을 표시합니다. 모든 게시물 표시

apache에서 virtual host 설정으로 여러대의 웹서버가 있는 것처럼 구성하는 방법

웹서버는 한 대 뿐인데, 몇 개의 웹페이지를 서비스해야하는 경우가 있다.

예를 들면, 흔하디 흔한 1년 운영비가 딸랑 1만원인 1GB 하드용량의 홈페이지 서버들.

요즘은 서버의 하드디스크가 몇 TB단위이다. 1TB라고 가정하자. 1TB면 1GB의 1000배다. 1만원씩 1천명에게 받으면 1천만원이다.
우리집의 하드디스크가 2TB이므로 그 웹서버에는 수십TB의 하드디스크가 있을테고, 1년간 도대체 얼마나 벌어들이는 것일까?

아무튼, 여기에서 설명하는 방법으로 Apache 웹서버 한 대를 이용해서 이런 서비스 환경을 구성할 수 있다.


1. 사용자들을 위한 폴더를 생성한다.

    mkdir /var/www/user1
    mkdir /var/www/user2
    mkdir /var/www/user3



2. default라는 파일을 다음과 같이 수정한다.

    vi /etc/apache2/sites-available/default

    <VirtualHost *:80>
            ServerAdmin user1@daum.net
            DocumentRoot /var/www/user1
            ServerName user1.co.kr
            ErrorLog ${APACHE_LOG_DIR}/error.log
            CustomLog ${APACHE_LOG_DIR}/access.log combined
            LogLevel warn
    </VirtualHost>
    <VirtualHost *:80>
            ServerAdmin user2@gmail.com
            DocumentRoot /var/www/user2
            ServerName user2.com
            ErrorLog ${APACHE_LOG_DIR}/error.log
            CustomLog ${APACHE_LOG_DIR}/access.log combined
            LogLevel warn
    </VirtualHost>
    <VirtualHost *:80>
            ServerAdmin user3@empal.com
            DocumentRoot /var/www/user3
            ServerName user3.or.kr
            ErrorLog ${APACHE_LOG_DIR}/error.log
            CustomLog ${APACHE_LOG_DIR}/access.log combined
            LogLevel warn
    </VirtualHost>



3. 서버를 재시작 시킨다.

    service apache2 restart

다른 드라이브에 있는 폴더에 접근하도록 apache 구성하기

Apache의 DocumentRoot는 "C:/Apache2.2/htdocs"이다.

"F:/내 음악"에 저장되어있는 음악파일을 웹서버가 서비스할 수 있도록 하려면 다음과 같이 한다.



1. 디렉토리 객체를 정의 (httpd.conf)
<Directory "F:/내 음악">
    Order allow,deny
    Allow from all
</Directory>

2. Alias를 정의 (httpd.conf)
Alias /music "F:/내 음악"

3. 웹서버 재시작

4. 브라우저에서 접속
http://localhost/music --> You don't have permission to access /music/ on this server.
http://localhost/music/abcd.mp3 --> OK


apache에서 cgi-bin 아래의 python 실행시키기


cgi-bin 폴더아래에 hello.py가 있다. 웹브라우저에서 hello.py를 실행시켜보았다.



그런데 에러메세지가 나온다. 서버 환경구성이 잘못되었다?

방금 실행시킨 hello.py는 아래와 같다. 한줄짜리이고, Windows에서는 이 상태로 잘 동작한다.
그런데 왜 웹서버에서는 동작하지 않는것인지?



서버의 로그는 이렇다.
[Fri Oct 31 14:59:29 2014] [error] [client 127.0.0.1] (OS 3)지정된 경로를 찾을 수 없습니다.  : couldn't create child process: 720003: hello.py
[Fri Oct 31 14:59:29 2014] [error] [client 127.0.0.1] (OS 3)지정된 경로를 찾을 수 없습니다.  : couldn't spawn child process: C:/Apache2.2/cgi-bin/hello.py


구글검색을 해보니 스크립트를 실행시킬 프로그램을 적어주지 않았다는 이야기가 있다. 그래서 적어줬다.



이렇게...


하지만 여전히 Internal Server Error는 사라지지 않는다.


구글검색을 더 했다. 그리고 HTTP header를 먼저 출력하도록 수정했다.
이렇게...



드디어 내가 원하는 결과를 얻었다.

hello.py의 최종 모습은 다음과 같다
#!C:/Python24/python print "Content-type: text/html\r\n\r\n" print "Hello, World."

apache에서 robots.txt 비슷한 것을 구현하기

https://developers.google.com/webmasters/control-crawl-index/docs/robots_meta_tag 에서 발췌.


Apache에서 실용적인 X-Robots-Tag 구현

Apache 기반 웹 서버에서 기본적으로 사용할 수 있는 .htaccess 및 httpd.conf 파일을 사용하여 사이트의 HTTP 응답X-Robots-Tag를 추가할 수 있습니다. X-Robots-Tag를 HTTP 응답과 함께 사용하는 경우 좋은 점은 사이트에 전체적으로 적용되는 크롤링 명령어를 지정할 수 있다는 것입니다.

예를 들어 전체 사이트에서 모든 .PDF 파일의 HTTP 응답에 noindex, nofollow X-Robots-Tag를 추가하려면 다음과 같이 사이트의 루트 .htaccess 파일이나 httpd.conf 파일에 다음 스니펫을 추가합니다.
<Files ~ "\.pdf$">
  Header set X-Robots-Tag "noindex, nofollow"
</Files>

로봇 메타 태그를 사용할 수 없는 HTML이 아닌 파일 (예: 이미지 파일) 에 X-Robots-Tag를 사용할 수 있습니다. 다음은 전체 사이트에서 이미지 파일(.png, .jpeg, .jpg, .gif)에 대해 noindex X-Robots-Tag 명령어를 추가하는 예입니다.
<Files ~ "\.(png|jpe?g|gif)$">
  Header set X-Robots-Tag "noindex"
</Files>