하위 도메인에 대한 Nginx 충돌 서버 이름


14

나는 현재 foo.domain.com에 대해 Nginx에서 실행중인 vhost를 가지고 있으며 모든 것이 잘 작동합니다.

bar.domain.com이라는 새 하위 도메인에 대한 새 파일을 만들었습니다. 두 가지 모두에 동일한 설정을 사용합니다.

Nginx를 다시 시작하면

Restarting nginx: nginx: [warn] conflicting server name "" on 0.0.0.0:443, ignored nginx.

bar.domain.com으로 이동하면 볼 내용이 있지만 foo.domain.com으로 이동하면 bar.domain.com으로 연결되는 페이지가 표시됩니다.

upstream php-handler {
    server unix:/var/run/php5-fpm.sock;
}

server {
        listen 80;
        server_name foo.domain.com;
        return 301 https://$server_name$request_uri;
}

server {
        listen 443;

        ssl on;
        ssl_certificate      [path_foo]/cacert.pem;
        ssl_certificate_key  [path_foo]/privkey.pem;

        root [path]/foo;

        ...
}

server {
        listen 80;
        server_name bar.domain.com;
        return 301 https://$server_name$request_uri;
}

server {
        listen 443;

        ssl on;
        ssl_certificate      [path_bar]/cacert.pem;
        ssl_certificate_key  [path_bar]/privkey.pem;

        root [path]/bar;
}

내가 어디로 잘못 가고 있니?


server_nameSSL (443) 구성에서도 지정해야합니다 .
zakjan

listen 443각 서버 에서와 같이 추가 server_name [foo/bar].domain.com합니까?
RockJake28

답변:


9

https 블록에 서버 이름도 지정 해야하는 것처럼 보입니다. 예 :

server {
    listen 443;
    server_name bar.domain.com;
    ssl on;
    ssl_certificate      [path_bar]/cacert.pem;
    ssl_certificate_key  [path_bar]/privkey.pem;

    root [path]/bar;
}

3

/etc/nginx/sites-available/<site-name>에 연결된 추가 파일이있을 수도 있습니다 /etc/nginx/sites-enabled/<site-name>.

해당 파일의 설정이 파일과 충돌 할 수 /etc/nginx/sites-available/default있습니다


3

실수로 서버 이름이 중복되었을 때 비슷한 문제가 발생했습니다.

server_name myserver.example.com myserver.example.com;

로 변경하여 수정했습니다.

server_name myserver.example.com;

내 경우에는 실수로 동일한 두 개의 개별 호스트를 가졌습니다 server_name. 나는 수년 동안 그 구성을 가지고 있었고 그 오류 메시지에 대해 크게 걱정하지 않았습니다. 내가 템플릿이었던 가상 호스트를 잘못 시작한 것으로 나타났습니다.
Gwyneth Llewelyn

2

또한 각 파일에 /etc/nginx/conf.d중복이 있는지 확인하십시오 .

내 경우에는 nginx -t테스트를 통과했습니다-nginx를 시작하려고 할 때 해당 오류 메시지가 나타납니다.

/etc/nginx/sites-enabled파일은 도메인 (서버 이름) 중복이없는이었고, 오직 한 1 참조 server_default(없이 localhost중복)

대신, conf.d둘 다 특정 도메인을 참조한 두 개의 파일이있었습니다 (예 : 2 개의 파일에는 다음과 같은 행이 있습니다. servername mydomain.com여기서 도메인 이름 중 하나는 2 개의 파일에 나열 됨).

내 해결책 : 따라서 모든 파일은 conf.d특정 servername(도메인 이름) 값을 한 번만 참조하십시오 .


( 불행히도 위의 문제를 해결 한 후
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx를 다시 시작하려고 할 때 오류 메시지가 나타납니다.)

업데이트 : 참고로, 다시 ... Address already in use오류 메시지가 위 :
모든 내가 한해야했다 sudo fuser -k 80/tcpservice nginx restart마법처럼 일했다! https://easyengine.io/tutorials/nginx/troubleshooting/emerg-bind-failed-98-address-already-in-use/
에서 답을 찾았습니다.

update2 :
다른 프로세스가 포트 80을 사용하고 있다고 제안되었습니다 (이것이 죽이는 이유이기도하며 b / c nginx가 당시에 실행 되지 않았 음을 의미 합니다).
https://community.letsencrypt.org/t/nginx-emerg-bind-to-80-failed-98-address-already-in-use/52914/4

또한 프로세스를 종료하기 전에 프로세스를 보는 것이 문제의 원인에 대한 통찰력을 제공 할 수 있다고 지적합니다.
따라서 sudo fuser -k 80/tcp-k 옵션없이 다음에 grep프로세스 번호를 사용하는 것이 좋습니다.
systemctl list-unit-files출력, 충돌 프로세스에 대한 통찰력 제공

나 :
fuser -kivn tcp 80여기서 :
-v프로세스 ID 외에 프로세스 이름을 인쇄는
-i사망하기 전에 프롬프트합니다
https://community.letsencrypt.org/t/nginx-emerg-bind-to-80-failed-98-address-already- 사용 중 / 52914 / 5


0

내 경우에는 중복을 찾을 수 없습니다. 그러나 default.conf가 있는데 여는 서버 블록과 닫는 대괄호를 제외한 모든 구성에 주석을 달았습니다. 이로 인해 충돌 오류가 발생했습니다.

기본적으로 이는 server_name 지시문없이 서버 블록에 대해 설명되지 않았으며 중복 된 것이 아닙니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.