도메인 이름이 내 서버의 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.sh
URL에서 요청한 내용과 정확히 일치하지 않습니다. 이 문제를 해결하려면 리디렉션해야 합니다. 가장 쉬운 방법은 파일을 활성화 .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
스크립트의 경우 반드시 그런 것은 아닙니다. 전달된 환경 변수에 액세스할 수 있는 한 원하는 언어를 사용하세요.