특별히 폴더를 만들지 않고 도메인을 동적으로 호스팅하는 방법은 무엇입니까?

특별히 폴더를 만들지 않고 도메인을 동적으로 호스팅하는 방법은 무엇입니까?

도메인 이름이 내 서버의 IP 주소를 가리킨다고 가정해 보겠습니다.

도메인 이름이 오자마자...

Apache를 실행하고 싶습니다.

 python_script domain.tld

아마도..

 bash_script domain.tld

수신 도메인이 다음과 같은 경우:

domain.tld/test

그 다음에..

 bash_script domain.tld/test

실행되어야 한다.

Bash 스크립트에서 계산을 실행하고 표시할 내용을 결정할 수 있습니다.

보안 문제 때문에 이런 식으로 작동하지 않을 수도 있지만 보안은 내 관심사가 아닙니다. 그냥 테스트해보고 싶었어요.

답변1

apache가상 호스트가 정의되지 않은 경우 기본 설치는 이를 가리키는 모든 URL을 제공합니다. 따라서 apache응답을 얻기 위해 추가 작업을 수행할 필요가 없습니다 .

스크립트를 삽입 /var/www/cgi-bin하고 통과하는지 확인합니다 chmod 0755 <script name>.

/var/www/cgi-bin/test.sh예를 들어 다음을 생성하는 경우 :

#!/bin/bash
echo "Content-type: text/html"
echo ""
echo "<pre>"
env
echo "</pre>

그런 다음 browser: 로 이동하면 http://<server name or IP>/cgi-bin/test.sh다음과 비슷한 내용이 표시됩니다.

SERVER_SIGNATURE=
Apache/2.2.15 (CentOS) Server at testing.lo Port 80

HTTP_USER_AGENT=Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0
SERVER_PORT=80
HTTP_HOST=testing.lo
DOCUMENT_ROOT=/var/www/html
SCRIPT_FILENAME=/var/www/cgi-bin/test.sh
REQUEST_URI=/cgi-bin/test.sh
SCRIPT_NAME=/cgi-bin/test.sh
HTTP_CONNECTION=keep-alive
REMOTE_PORT=43964
PATH=/sbin:/usr/sbin:/bin:/usr/bin
PWD=/var/www/cgi-bin
SERVER_ADMIN=root@localhost
HTTP_ACCEPT_LANGUAGE=en-gb,en;q=0.5
HTTP_ACCEPT=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
REMOTE_ADDR=192.168.122.1
SHLVL=1
SERVER_NAME=testing.lo
SERVER_SOFTWARE=Apache/2.2.15 (CentOS)
QUERY_STRING=
SERVER_ADDR=192.168.122.40
GATEWAY_INTERFACE=CGI/1.1
SERVER_PROTOCOL=HTTP/1.1
HTTP_CACHE_CONTROL=max-age=0
HTTP_ACCEPT_ENCODING=gzip, deflate
REQUEST_METHOD=GET
_=/bin/env

보시다시피 HTTP_HOST이는 서버의 URL( testing.lo이 경우)이며 스크립트에서 사용할 수 있습니다.

그러나 이는 /cgi-bin/test.shURL에서 요청한 내용과 정확히 일치하지 않습니다. 이 문제를 해결하려면 리디렉션해야 합니다. 가장 쉬운 방법은 파일을 활성화 .htaccess하고 구성하는 것입니다.

/etc/httpd/conf/httpd.conf줄을 찾아 <Directory "/var/www/html">로 시작하는 줄이 보일 때까지 몇 줄 아래로 스크롤합니다 AllowOverride. 으로 설정되어 있는지 확인하세요 All. 다음이 있어야 합니다.

<Directory "/var/www/html">
...
...
AllowOverride All
...
...
</Directory>

이제 파일을 만들고 /var/www/html/.htaccess다음 내용을 추가합니다.

RewriteEngine on
RewriteRule (.*) /cgi-bin/test.sh/$1 [L]

재시작 apache:

service httpd restart

브라우저에서 서버의 URL을 가리킵니다: http://<server name or IP>.

이전과 비슷한 결과가 표시되지만 URL에 스크립트 경로를 추가하지 않아야 합니다. 또한 스크립트에서 사용할 수 있도록 입력한 URL을 알려주는 환경 변수가 있습니다.

HTTP_HOST서버의 이름입니다.

PATH_INFO서버에 추가된 경로입니다. (브라우저에 입력하는 경우 test)http://<server name or IP>/test

귀하의 스크립트에서는 bash귀하의 질문에서 알 수 있듯이 스크립트의 인수를 구문 분석하는 대신 이러한 변수를 사용해야 합니다.

그러나 bash스크립트의 경우 반드시 그런 것은 아닙니다. 전달된 환경 변수에 액세스할 수 있는 한 원하는 언어를 사용하세요.

관련 정보