클라이언트가 옵션 요청을 할 때 httpd 서버가 200 응답을 보내도록 centos+apache에서 일부 구성을 수행하고 싶습니다.
여기에 아주 오래된 게시물이 있습니다(2011).
Apache에서 HTTP OPTIONS 요청에 대해 "200 OK"를 반환합니다.
이 구성은 현재 운영 체제 및 Apache에 적합하지 않을 수 있습니다.
구성 상태가 양호하면 curl -X OPTIONS -i http://remote_ip/remote.html
200 반환 코드를 받을 수 있습니다.
내 시도는 다음과 같습니다.
1.cat.htaccess
AuthName "login"
AuthType Basic
AuthUserFile /var/www/html/passwd
require user usernam
Options -Indexes
<LimitExcept OPTIONS>
Require valid-user
</LimitExcept>
systemctl restart httpd
다음 명령의 오류 메시지와 함께 다시 시작하세요.curl -X OPTIONS -i http://remote_ip/remote.html
<title>500 Internal Server Error</title>
</head><body>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error or
misconfiguration and was unable to complete
your request.</p>
.htaccess에서 위 구성을 삭제합니다.
2.cat /etc/httpd/conf/httpd.conf.
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride AuthConfig
Require all granted
Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "POST, GET, PUT, DELETE, OPTIONS"
Header always set Access-Control-Allow-Credentials "true"
Header always set Access-Control-Allow-Headers "Authorization,DNT,User-Agent,Keep-Alive,Content-Type,accept,origin,X-Requested-With"
RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ blank.html [QSA,L]
</Directory>
systemctl restart httpd
다음 명령의 오류 메시지와 함께 다시 시작하세요.curl -X OPTIONS -i http://remote_ip/remote.html
HTTP/1.1 401 Unauthorized
Date: Sat, 08 Sep 2018 00:34:36 GMT
Server: Apache/2.4.6 (CentOS)
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, PUT, DELETE, OPTIONS
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Authorization,DNT,User-Agent,Keep-Alive,Content-Type,accept,origin,X-Requested-With
WWW-Authenticate: Basic realm="login"
Content-Length: 381
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>401 Unauthorized</title>
</head><body>
<h1>Unauthorized</h1>
<p>This server could not verify that you
are authorized to access the document
requested. Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.</p>
</body></html>
답변1
첫째, 파일에 문제가 있습니다 .htaccess
.
- 6-8행: 사용자 인증을 요구하지만 이는 요청이 아닌 경우에만 해당됩니다
OPTIONS
. 괜찮아요. usernam
하지만 4번째 줄에서는 요청 방식(GET, POST, OPTIONS 등)에 관계없이 사용자를 사용자로 인증해야 합니다.
LimitExcept
따라서 4행을 제거하거나 구성 섹션 으로 이동하면 제대로 작동합니다.
자세한 내용은 다음을 참조하세요.mod_authz_core 문서
둘째, 게시한 첫 번째 솔루션의 오류 메시지("서버에 내부 오류 또는 구성 오류가 발생했습니다...")는 파일이 유효하지 않음을 의미합니다 httpd.conf
. 다른 잘못된 구성이 있을 수 있습니다. 구성을 확인하고아파치 문서.
참고로 테스트에 사용한 구성 파일은 다음에서 찾을 수 있습니다.https://github.com/mhutter/stackexchange/tree/master/467654
답변2
이 오류는 401 Unauthorized
HTTP 서버에 자격 증명(일반적으로 사용자 이름과 비밀번호)이 필요함을 의미합니다. 질문에 따르면 .htacccess
인증을 요청하는 파일을 삭제했으므로 인증을 요청하는 콘텐츠가 활성 구성에 계속 존재해야 합니다.
자격 증명을 제공하려면 옵션 (짧은 형식 또는 긴 형식) curl
을 사용할 수 있습니다 .-u, --user <user:password>
오류가 발생하면 500
발생한 오류를 설명하는 항목이 Apache 로그에 있어야 합니다.
문제가 작동하지 않으면 일반적으로 문제를 찾는 데 필요한 최소한으로 구성을 줄이는 것이 가장 좋습니다. 이렇게 하려면 문제를 일으키지 않는다고 생각되는 행을 주석 처리하고 다시 시도하십시오. 작동이 시작되고 어디를 더 자세히 살펴봐야 할지 알거나 구성이 단순화됩니다.
구성에 따라 헤더 행이 문제를 일으키지 않을 수도 있지만 먼저 리디렉션 없이 작동하도록 시도해 보았습니다. 유효한 구성이 있으면 다시 중단되거나 원하는 구성이 될 때까지 줄을 추가할 수 있습니다.