업무 기록/ETC

리눅스(Linux) nginx 설정

code2772 2023. 7. 11. 21:22
728x90
반응형

 

✔ upstream - 백엔드 서버 그룹을 정의하는 지시어

upstream ssl_service {
    server 127.0.0.1:8000;
    server 127.0.0.1:8001;
    server 127.0.0.1:8002;
    server 127.0.0.1:8003;
    server 127.0.0.1:8004;
}


ssl_service라는 이름으로 그룹을 정의하고, 8000부터 8004까지의 포트를 가진 서버를 지정


✔ Port와 서버 이름

server {
        listen 443 ssl;
        server_name tistoryt.co.kr;
        #server_name 127.1.2.3;
        #ssl  on;


tistoryt.co.kr 도메인에서 들어오는 HTTPS(포트 443) 요청을 처리하는 부분이며, 나중에 예를 들어 localhost:9999 였던 주소가 server_name tistoryt.co.kr 이렇게 변화하는 부분이다.


✔ SSL 인증서와 키 파일 경로

  ssl_certificate /home/tistory/nginx/certs/T.tistory.co.kr.pem;
  ssl_certificate_key /home/tistory/nginx/certs/T.tistory.co.kr.key;


SSL 암호화를 위한 인증서와 개인 키 파일의 경로를 설정한다. ssl_certificate는 공개 인증서 파일의 경로를 지정하고, ssl_certificate_key는 해당 인증서의 개인 키 파일의 경로를 지정한다.

SSL 인증서와 개인 키 파일은 HTTPS(암호화된 HTTP) 연결을 설정하기 위해 사용된다. 이들 파일은 서버의 신원을 확인하고 통신을 암호화하는 데 필요한 보안 요소

✔ SSL/TLS

    # 지원할 SSL/TLS 프로토콜 버전을 설정합니다.
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    # 사용할 암호화 알고리즘을 지정합니다.
    ssl_ciphers 'EECDH+AESGCM:AAA+AAAAMA:AES256+EECDH:AES256+EDH';
    ssl_prefer_server_ciphers on;


SSL 프로토콜 및 암호화 알고리즘: ssl_protocols에서는 지원할 SSL/TLS 프로토콜 버전을 설정하고, ssl_ciphers에서는 사용할 암호화 알고리즘을 지정

✔ 경로설정

    # 서버의 루트 디렉토리와 인덱스 파일을 설정합니다.
    root /home/Terashot/nginx/tistory_service/wwwroot;
    index index.php index.html index.htm;

    # 에러 로그 파일의 경로를 설정합니다.
    error_log /home/Tistory/nginx/tistory_service/logs/error.log;


서버의 루트 디렉토리와 인덱스 파일을 설정하는 것은 웹 서버가 요청을 적절히 처리하고 원하는 파일을 제공

✔리버스 프록시 설정

 # /api/v1/image 경로로 들어오는 요청을 리버스 프록시로 처리하는 location 블록입니다.
    location /api/v1/image {
        proxy_redirect off;
        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;
        add_header Front-End-Https on;
        proxy_set_header X-NginX-Proxy true;

        # 해당 요청을 백엔드 서버 그룹인 tistory_service로 전달합니다.
        proxy_pass http://localhost:9443/api/v1/image;
        charset utf-8;
    }


location /api/v1/image에서는 /api/v1/image 경로로 들어오는 요청을 리버스 프록시로 처리

proxy_pass 지시문에서는 해당 요청을 백엔드 서버의 주소로 전달하도록 설정. 이 경우, http://localhost:9443/api/v1/image로 요청이 전달되며, 백엔드 서버에서 해당 요청을 처리

location /api/v1/image: 이 설정은 /api/v1/image 경로로 들어오는 요청에 대한 설정을 지정

proxy_redirect off;: 프록시 응답의 리다이렉션을 해제한다. 이는 백엔드 서버에서 반환되는 리다이렉션 응답을 수정하지 않도록 설정

proxy_set_header: 프록시 요청 헤더를 설정한다. $http_host는 클라이언트의 Host 헤더 값을 그대로 전달하고, $remote_addr는 클라이언트의 IP 주소를 전달한다.$proxy_add_x_forwarded_for는 클라이언트의 IP 주소를 포함한 X-Forwarded-For 헤더를 설정하며, $scheme은 현재 사용 중인 프로토콜을 전달한다. Front-End-Https 헤더를 on으로 설정하여 프론트 엔드에서 HTTPS 연결을 사용함을 알린다.

proxy_set_header X-NginX-Proxy true;: X-NginX-Proxy 헤더를 true로 설정하여 백엔드 서버로 전달될 때 Nginx 프록시를 통해 전달되었음을 나타낸다.

proxy_pass http://localhost:9443/api/v1/image;: 설정된 요청을 백엔드 서버로 전달한다. 이 경우, 요청은 http://localhost:9443/api/v1/image로 프록시된다. 즉, 백엔드 서버의 해당 경로에 대한 처리를 위임하게 된다.

charset utf-8;: 전송되는 콘텐츠의 문자셋을 UTF-8로 설정한다. 이는 클라이언트로부터 받은 요청과 백엔드 서버로부터 받은 응답을 UTF-8로 인코딩 및 디코딩하는 데 사용된다.


tisotry.co.kr/api/v1/image 경로로 요청을 보낼 경우, Nginx는 해당 요청을 백엔드 서버로 프록시하여 처리하게 된다. 이를 통해 SSL 암호화와 로드 밸런싱 등의 기능을 제공

 

반응형