본문 바로가기
서버 및 보안

Nginx Troubleshootings

by 다움위키 2023. 12. 25.

엔진엑스를 사용하면서 문제가 되었던 것과 해결책이 있으면, 그것을 적어 둡니다.

Nginx modules

버전 1.21.5에서 pcre2를 지원하면서, 타사 모듈 중에 http-subs-filter, http-lua, http-fancyindex 모듈 등이 컴파일이 되지 않거나, 로딩이 되지 않거나, 오동작을 일으킵니다. http-subs-filter는 패치가 제공되고, http-lua 모듈은 1.21.6 배포 후에 정보가 제공될 것으로 기대되고, fancyindex는 아직 소식이 없습니다.

디렉토리 목록화

보통 ftp 서버를 이용해서, 파일을 제공하지만, 최근에 ftp 클라이언트를 웹 브라우저에서 제거하는 경향이 있습니다. 만약 ftp로 접근하고 싶으면, ftp 전용 클라이언트, 예를 들어 FileZilla를 이용해야 합니다. 게다가 클라이언트 디바이스는 점점 모바일 기기가 증가하는 추세이므로, 가능한 웹 브라우저에서 로컬 파일에 접근하도록 설정하는 것이 필요해 보입니다.

	location /directory_name/ {
    	autoindex on;
    	autoindex_exact_size off;
    	autoindex_format html;
    	autoindex_localtime on;
	}

한편, 웹 페이지에서 위의 디렉토리 아래의 특정 하위 디렉토리로 접근하고 싶으면, 끝에 슬래쉬를 붙여야 합니다. 그렇지 않으면, 포트가 붙어서 출력되기 때문에 목록을 보여주지 못할 수 있습니다.

1.18.0 compile

Gcc-10에서 컴파일 오류가 발생합니다. Gcc-9으로 변경해서 컴파일해 보시기 바랍니다.

413 Request Entity Too Large

파일 업로드에 대한 설정은 미디어위키 자체에서, php에서, nginx에서 모두 가능합니다. 당연히 최하 값으로 설정된 부분의 영향을 받습니다. /etc/nginx/nginx.conf에 씁니다.

http {
     client_body_buffer_size 10K;
     client_header_buffer_size 1k;
     client_max_body_size 25m;     # 이 값을 수정합니다.

당연히 서비스를 재시작해야 적용됩니다.

  • sudo systemctl restart nginx

Anacron

시스템 부팅과 함께, Anacron job 'cron.daily' 오류가 생깁니다. 오류 내용은 다음과 같습니다:

error: word unexpected error: error running shared prerotate script for '/var/log/nginx/*.log'

로그 회전에 대한 /etc/logrotate.d/nginx의 설정 오류입니다. 다음과 같이 바꾸어 줍니다.

    prerotate
        if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
            run-parts /etc/logrotate.d/httpd-prerotate; \
        fi \
        /usr/share/doc/awstats/examples/awstats_updateall.pl now -awstatsprog=/usr/lib/cgi-bin/awstats.pl
    endscript
    postrotate
        [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
    endscript

VMware Workstaion

Nginx에서 443번 포트를 사용하려면 문제가 생깁니다. 이미 vmware-workstation이 443번 포트를 사용하고 있기 때문입니다.

  1. vmware workstation을 실행합니다.
  2. Edit > Preferences을 누릅니다.
  3. Shared VMs을 선택합니다.
  4. Workstation Server Settings를 사용하지 않거나 포트를 바꿉니다.

Buffer size

Php7.1이 7.0보다는 반응 속도등의 개선이 있어서 php7.1-fpm을 사용하면서부터 Tools->SpecialPages를 누르면 502 bad gateway가 발생했습니다.

우선 서버의 오류를 확인해 보니 다음과 같습니다.

  • tail -l /var/log/nginx/error.log
...
2017/05/14 23:47:01 [error] 1302#1302: *33 upstream sent too big header while reading response header from upstream, client: 175.198.228.230, server: brajo.ddns.com, request: "GET /wiki/Special:SpecialPages HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php7.1-fpm.sock:", host: "brajo.duckdns.org", referrer: "http://brajo.duckdns.org/wiki/Special:WhatLinksHere/Category:Core_System"

2개의 설정파일을 수정해 주어야 합니다. 먼저 /etc/nginx/nginx.conf를 수정합니다.

	# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

	proxy_buffer_size   128k;
	proxy_buffers   4 256k;
	proxy_busy_buffers_size   256k;

/etc/nginx/site-available/default를 수정합니다.

	location ~ \.php$ {
		include snippets/fastcgi-php.conf;
	#
	##	# With php5-cgi alone:
	##	fastcgi_pass 127.0.0.1:9000;
	#	# With php5-fpm:
		fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
		fastcgi_read_timeout 300;
		# buffer_size increase
		fastcgi_buffer_size 128k;
		fastcgi_buffers 4 256k;
		fastcgi_busy_buffers_size 256k;
	}

설정을 수정하고 나면 서버를 재시작해야 합니다.

  • sudo systemctl restart nginx

400 Bad Request

파이어폭스 62.0a1 (2018-05-28)에서 다음과 같은 오류가 생깁니다.

Request Header Or Cookie Too Large

이 오류는 처음 접하는 파이어폭스나 크롬에서는 발생하지 않습니다. 일정 시간이 지나서 사이트의 데이터가 쌓이게 되면 발생하는 것으로 보입니다.

다음 위치에서 해당 사이트의 데이터를 삭제해 줍니다.

Preferences->Privacy & Security->Cookies and Site data->Manage Data