레이블이 nginx인 게시물을 표시합니다. 모든 게시물 표시
레이블이 nginx인 게시물을 표시합니다. 모든 게시물 표시

2016년 8월 24일 수요일

Django의 runserver_plus에 올린 Let's Encrypt의 SSL certificate

개발용이지만 https가 필요해서 RunServerPlus를 사용하고 있다. 문제가 생긴 것은 외부의 결제 시스템에서 개발 서버에 접속할 때 아래와 같은 에러가 난다는 것.

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

결제 시스템쪽의 JVM을 업데이트하면 좋겠는데, 우리쪽에서 처리를 하라고 연락이 왔다.

https://www.geocerts.com/ssl_checker에 접속해서 certificate를 확인해보라며. certificate를 확인해보니, certificate chain을 확인할 수 없단다.


runserver_plus에는 Certificate chain file을 지정하는 옵션이 보이지 않는다. --cert만 지정할 수 있다. (그런데, 이 옵션이면 되는 것이었다)

Nginx + Gunicorn 또는 uWSGI로 가면서 chain file을 지정하는 방법이 있겠지 하고, uwsgi 설치하고, nginx 설정하고 nginx의 옵션을 알아보는데, crt 파일에 chain path 정보를 같이 넣은 것도 동작한다는 것을 알게 되었다-_-

Let's Encrypt에서 certificate 갱신하면 만드는 파일들이 있다.

  • cert.pem
  • chain.pem
  • fullchain.pem
  • privkey.pem

위의 파일들 중에서 cert.pem을 crt 파일로 symlink해서 사용하고 있었는데, chain 정보도 들어 있는 fullchain.pem을 crt 파일로 symlink한 후 Django를 올리니..


잘 된다.



2015년 1월 1일 목요일

특정 IP를 nginx 접속 차단하기

아침에 서버 로그 그래프를 보니, 다운로드 페이지로의 접속 횟수가 엄청나다. 로그를 확인하니, 상하이쪽 IP 주소에서 계속 접속을 하고 있다.

nginx.conf에 include /etc/nginx/conf.d/blockips.conf를 만들고 nginx.conf에서 include를 했다.

nginx.conf:

http {
...

    # BLOCK SPAMMERS IP ADDRESS
    include /etc/nginx/conf.d/blockips.conf;
}

blockips.conf:

deny XXX.XXX.XXX.XXX;

nginx를 다시 시작하기 전에 nginx -t로 설정파일을 테스트해 본 후 재 시작.

그런데, 이렇게 하면 nginx에서 접속 처리를 하기 때문에 로그에는 계속 남고, 시스템 자원을 이용하게 된다.

더 앞쪽에서 막기 위해 iptables 사용:

sudo iptables -A INPUT -s XXX.XXX.XXX.XXX -j DROP