웹사이트 검색

일반적인 Nginx 연결 오류


소개

Nginx는 인터넷에서 트래픽이 많은 대규모 사이트를 많이 호스팅할 수 있는 인기 있는 웹 서버입니다. Nginx 연결 오류는 가능한 원인과 해결 방법이 많기 때문에 디버그하기 어려울 수 있습니다. 또한 오류를 수정하기 위한 올바른 방향을 알려주는 힌트가 항상 많지는 않습니다. 이러한 오류의 특성은 처음부터 Nginx와의 연결 설정 실패와 관련이 있기 때문에 이러한 오류는 종종 Nginx 수준의 특정 오류가 아닌 브라우저 수준에서 나타납니다. 실제로 Nginx의 많은 일반적인 오류는 포트 또는 방화벽과 같은 연결의 일부 측면과 관련이 있습니다.

이 가이드의 예제는 Ubuntu 22.04 서버에서 테스트되었지만 대부분의 Nginx 설치에 적용할 수 있습니다. 이러한 오류의 대부분은 Nginx의 표준화된 구성 파일 범위 내에서 해결할 수 있지만 디렉터리와 경로는 약간 다를 수 있습니다.

이 자습서에서는 Nginx 웹 서버에 대한 브라우저 연결 오류의 의미와 서버 백업 및 실행을 위해 문제를 식별하고 수정하기 위해 수행할 수 있는 다양한 단계에 대해 알아봅니다.

Nginx 오류 로그 검사

이 자습서에 제시된 오류 및 솔루션은 일반적인 경우이지만 완전하지는 않습니다. Nginx가 유효한 문장으로 인식하는 구조를 깨뜨리는 구문 오류의 특성으로 인해 다음 오류는 Nginx가 응답하는 방법에 대한 지침일 뿐입니다. 종종 하나의 오류가 다른 오류로 연쇄될 수 있으며 오류는 더 크거나 별도의 문제를 나타낼 수 있습니다. 특정 상황과 설정은 다를 수 있습니다.

실행 중인 오류 목록을 보려면 항상 Nginx 오류 로그를 참조할 수 있습니다.

  1. sudo cat /var/log/nginx/error.log

\이 사이트에 연결할 수 없습니다\ 오류 해결

온라인으로 탐색할 때 사이트에 연결할 수 없습니다. 이 문제에는 잠재적으로 많은 원인이 있지만 이 튜토리얼에서는 Nginx를 설정하는 사용자의 관점에서 일반적인 오류에 중점을 둡니다. 때때로 브라우저를 새로 고치면 문제가 해결될 수 있지만 자체 웹 서버의 경우 백엔드에서 서버 연결에 영향을 미치는 다른 요인이 있을 수 있습니다.

다음은 웹 브라우저에 나타날 수 있는 오류 메시지의 예입니다.

시작하기 전에 이 오류가 웹 서버에 대해 말하는 내용에 대해 논의하겠습니다. 첫째, example.com 주소가 응답하는 데 너무 오래 걸리므로 메시지 끝에 ERR_CONNECTION_TIMED_OUT이 참조됩니다. 그러나 이는 Nginx 서버의 직접적인 오류가 아니라 브라우저 수준 오류라는 점을 기억하세요. 이 오류 메시지는 서버에 연결할 수 없는 원인으로 해석될 수 있습니다. 또한 여기에 제안된 솔루션은 클라이언트 측 최종 사용자의 관점에서 제공됩니다.

다시 말하지만 이것은 인터넷에서 특정 웹 사이트를 방문하지 않고 자신의 웹 서버를 실행하는 시나리오입니다. 문제를 진정으로 진단하려면 가능한 원인 목록을 통해 제거 프로세스에서 Nginx 설정을 직접 검사해야 합니다.

Nginx를 사용하고 있으므로 특정 명령을 실행하고 방화벽 및 구성 설정을 확인하여 이 오류를 일으킬 수 있는 여러 항목을 평가할 수 있습니다.

Nginx 웹 서버가 활성 상태인지 확인

수행할 수 있는 첫 번째 단계는 시스템에서 Nginx가 활성화되어 있고 설치 문제가 없는지 확인하는 것입니다. 시스템에서 실행 중인 Nginx 서비스의 상태를 확인하기 위해 systemd init 시스템을 실행하여 이를 확인할 수 있습니다.

  1. systemctl status nginx

Nginx 웹 서버가 제대로 실행 중인 경우 다음과 같은 출력이 표시됩니다.

● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enable>
     Active: active (running) since Thu 2022-11-03 16:37:22 UTC; 1 week 4 days >
       Docs: man:nginx(8)
   Main PID: 3253 (nginx)
      Tasks: 2 (limit: 1116)
     Memory: 3.7M
        CPU: 1.250s
     CGroup: /system.slice/nginx.service
             ├─3253 "nginx: master process /usr/sbin/nginx -g daemon on; master>
             └─3254 "nginx: worker process"

출력에는 Active라는 줄이 있고 웹 서버가 실행 중인지 여부를 나타냅니다. 이 예에서는 성공적으로 실행되고 있습니다. 그렇지 않은 경우 이 줄은 inactive (dead)로 읽힐 것입니다.

참고: 출력이 inactive (dead)를 반환하는 경우 sudo systemctl start nginx로 서버를 다시 시작해 볼 수 있습니다. 최근에 구성을 변경한 경우 sudo systemctl reload nginx를 실행하여 다시 로드한 다음 상태를 다시 확인하십시오. 다양한 Nginx 프로세스를 관리하는 방법을 설명하는 자습서에서 이에 대해 자세히 알아볼 수 있습니다.

Nginx 서비스가 실행 중임을 확인한 후 브라우저에 서버 주소를 http://example.com으로 다시 입력하여 연결 문제가 계속 발생하는지 테스트할 수 있습니다. IP 주소가 확실하지 않은 경우 icanhazip.com 도구를 사용하여 IP 주소를 찾을 수 있습니다.

  1. curl -4 icanhazip.com

이 시점에서 여전히 사이트에 연결할 수 없는 경우 다음 단계는 방화벽 설정을 확인하는 것입니다.

방화벽 설정 확인 및 조정

웹 서버의 연결을 확인하기 위해 취할 수 있는 또 다른 단계는 적절한 포트 연결을 통해 요청을 수락하도록 방화벽 설정이 제대로 구성되어 있는지 확인하는 것입니다. 그렇지 않은 경우 포트에 연결할 수 있도록 방화벽 설정을 조정해야 합니다. 기본적으로 Nginx 웹 서버는 포트 80에서 들어오는 모든 요청을 수신하고 SSL 인증서가 설정된 경우 포트 443에서 보안 연결을 수신합니다. 그러나 이 자습서에서는 기본 포트 80에 중점을 둘 것입니다.

이 예에서는 Ubuntu 22.04와 Uncomplicated Firewall, UFW를 사용하고 있습니다. 특정 배포판에 따라 다를 수 있습니다. 방화벽의 현재 설정을 확인하여 시작하십시오. 루트 사용자 권한으로 다음 명령을 실행해야 합니다. 여기에서는 sudo 권한이 있는 사용자를 사용하는 것이 좋습니다.

  1. sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

이 출력은 이 시스템에서 현재 열린 포트 연결을 나열합니다. 안타깝게도 80 포트가 목록에 없으므로 Nginx 액세스를 허용하려면 포트를 추가해야 합니다. 사용 가능한 애플리케이션 구성이 확실하지 않은 경우 ufw app list를 실행할 수 있습니다.

  1. sudo ufw app list
Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

Nginx가 성공적으로 설치되었으므로 구성에 사용할 수 있는 다양한 Nginx 프로필이 나열됩니다. 다음은 각 프로필이 의미하는 바에 대한 간략한 개요입니다.

  • Nginx Full: 포트 80(일반, 암호화되지 않은 트래픽) 및 443(TLS/SSL 암호화된 트래픽)을 모두 엽니다.
  • Nginx HTTP: 80 포트만 엽니다
  • Nginx HTTPS: 443 포트만 엽니다

연결을 올바르게 구성하려면 포트 80만 열면 되므로 다음 명령을 사용하여 Nginx HTTP 애플리케이션을 추가할 수 있습니다.

  1. sudo ufw allow 'Nginx HTTP'

참고: 방화벽 설정을 조정할 때 구성한 트래픽을 허용하는 가장 제한적인 프로필을 활성화하는 것이 좋습니다. 이것은 귀하의 필요에 따라 다릅니다. 이 예에서는 포트 80에 대해 Nginx HTTP에 대한 트래픽을 허용하지만 Nginx HTTPS 에 대해 설정하는 방법에 대해 자세히 알아보려면 포트 443의 경우 Let's Encrypt로 Nginx 보안에 대한 자습서에서 자세한 내용을 읽을 수 있습니다.

이 명령이 성공하면 Rule added 출력이 반환됩니다. Nginx HTTP 애플리케이션이 목록에 추가되었는지 확인하려면 sudo ufw status로 상태를 다시 확인하세요.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx HTTP                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

이제 이 출력에는 추가된 Nginx HTTP 애플리케이션이 나열되며 포트 80은 연결을 수신하기 위해 열려 있습니다.

Nginx 구성 파일 확인

웹 브라우저를 테스트하기 전에 구성 설정을 확인하여 서버 도메인 블록이 포트 80에서 수신 대기하도록 설정되어 있는지 확인하는 것이 좋습니다. Nginx 구성에서 적절한 포트 및 IP 주소를 설정하는 것이 필수적이며 방화벽에서 적절한 열린 포트와 쌍을 이루어야 합니다. 구성 요소가 없으면 연결이 실패합니다.

원하는 텍스트 편집기에서 Nginx 구성 파일을 열 수 있습니다. 여기서는 nano를 사용합니다.

  1. sudo nano /etc/nginx/sites-available/example.com

파일이 열리면 처음 두 줄은 listen 지시문으로 구성됩니다.

server {
       listen 80; 
         listen [::]:80; 

       root /var/www/example.com/html;
        index index.html index.htm index.nginx-debian.html;

        server_name example.com www.example.com;

        location / {
                try_files $uri $uri/ =404;
        }
}

listen 지시문은 서버가 요청을 수락할 수 있는 포트를 지정합니다. 또한 대괄호로 묶인 listen [::]은 IPv6 주소를 나타냅니다. 원하는 경우 listen 지시문 뒤에 IP 주소 정보를 포함할 수도 있습니다. 그러나 이 특정 예에서 도메인에 대한 연결은 root 경로 및 server_name 지시문으로 표시됩니다. 앞에서 언급했듯이 이 구성 파일에서 도메인 또는 IP 주소 정보가 정확한지 확인해야 합니다. 그렇지 않으면 작동하지 않습니다. 따라서 연결하려는 도메인에서 rootsever_name 지시문이 정확한지 다시 한 번 확인하십시오.

listen 지시문에 대한 구성이 포트 80에 올바르게 설정되었는지 확인한 후 파일을 저장하고 닫을 수 있습니다. nano를 사용하는 경우 CTRL + XYENTER를 눌러 이 작업을 수행할 수 있습니다.

구성 파일에 구문 오류가 없는지 확인하려면 다음을 실행하십시오.

  1. sudo nginx -t

구성 파일을 변경했고 이 명령을 실행한 후 구문 오류가 발생하지 않은 경우 sudo systemctl restart nginx를 사용하여 변경 사항을 활성화하려면 Nginx를 다시 시작해야 합니다.

이 작업을 완료한 후 브라우저를 열고 http://example.com으로 이동합니다. 다음 웹 페이지를 수신하면 포트 80이 요청을 수락하도록 조정된 방화벽 설정이 성공한 것입니다.

이 웹 페이지는 Nginx 웹 서버가 설치되고 올바르게 작동하는지 확인합니다.

결론

이 자습서에서는 Nginx 서비스가 활성 상태인지 확인하는 방법과 Nginx 웹 서버를 사용할 때 일반적인 이 사이트에 연결할 수 없음 오류를 유발할 수 있는 방화벽 및 포트 연결을 확인하는 방법을 배웠습니다. Nginx에 대해 자세히 알아보려면 Ubuntu 22.04에 Nginx를 설치하는 방법을 확인하세요.