모든 가상 호스트에 대해 nginx에서 robots.txt를 전역으로 설정하는 방법 main에 두어 Apache에서

robots.txtnginx 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/;  }
  1. Nginx는 모든 “regexp”위치를 모양 순서대로 실행합니다. “regexp”위치가 성공하면 Nginx는이 첫 번째 일치를 사용합니다. “regexp”위치가 성공하지 못한 경우 Nginx는 이전 단계에서 찾은 일반 위치를 사용합니다.
  2. “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;
  }
}

답변