robots.txt
nginx http 서버 아래의 모든 가상 호스트 를 설정하려고 합니다. 나는 다음을 main에 두어 Apache에서 할 수있었습니다 httpd.conf
.
<Location "/robots.txt">
SetHandler None
</Location>
Alias /robots.txt /var/www/html/robots.txt
아래의 (a) nginx.conf 및 (b) conf.d / robots.conf를 포함하여 nginx와 비슷한 작업을 시도했습니다.
location ^~ /robots.txt {
alias /var/www/html/robots.txt;
}
나는 ‘=’로 시도했고 심지어 그것을 테스트하기 위해 가상 호스트 중 하나에 넣었습니다. 아무것도 효과가없는 것 같습니다.
내가 여기서 무엇을 놓치고 있습니까? 이것을 달성하는 다른 방법이 있습니까?
답변
http
블록 내에서는 위치를 사용할 수 없습니다 . nginx에는 전역 별칭 (즉, 모든 가상 호스트에 대해 정의 할 수있는 별칭)이 없습니다. 전역 정의를 폴더에 저장하고 포함하십시오.
server {
listen 80;
root /var/www/html;
include /etc/nginx/global.d/*.conf;
}
답변
nginx 설정에서 robots.txt 파일의 내용을 직접 설정할 수 있습니다.
location = /robots.txt { return 200 "User-agent: *\nDisallow: /\n"; }
올바른 Content-Type을 추가 할 수도 있습니다.
location = /robots.txt {
add_header Content-Type text/plain;
return 200 "User-agent: *\nDisallow: /\n";
}
답변
정의 된 다른 규칙이 있습니까? 아마도 common.conf 또는 구성에 우선하는 다른 conf 파일이 포함되어있을 수 있습니다. 다음 중 하나가 제대로 작동합니다.
location /robots.txt { alias /home/www/html/robots.txt; }
location /robots.txt { root /home/www/html/; }
- Nginx는 모든 “regexp”위치를 모양 순서대로 실행합니다. “regexp”위치가 성공하면 Nginx는이 첫 번째 일치를 사용합니다. “regexp”위치가 성공하지 못한 경우 Nginx는 이전 단계에서 찾은 일반 위치를 사용합니다.
- “regexp”위치가 “prefix”위치보다 우선합니다
답변
나는 acme challanges와 같은 문제가 있었지만 동일한 원칙이 귀하의 경우에도 적용됩니다.
이 문제를 해결하기 위해 내 사이트를 모두 비표준 포트로 옮기고 8081
포트 80에서 수신 대기하는 가상 서버를 만들었습니다 127.0.0.1:8081
. .well-known을 제외한 모든 요청을 프록시합니다 . 이것은 거의 하나의 추가 홉을 가진 전역 별명으로 작동하지만 nginx의 비동기 특성으로 인해 성능이 크게 저하되지는 않습니다.
upstream nonacme {
server 127.0.0.1:8081;
}
server {
listen 80;
access_log /var/log/nginx/acme-access.log;
error_log /var/log/nginx/acme-error.log;
location /.well-known {
root /var/www/acme;
}
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frame-Options SAMEORIGIN;
# WebSocket support (nginx 1.4)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://nonacme;
}
}