[Linux] nginx config 설정

[Linux] nginx config 설정 updated_at: 2023-06-21 17:23

nginx config 설정

기본적인 설정

server {
  listen 80; # 리스닝 포트
  root   /home/project/public; # Document Root
  server_name example.com www.example.com; # Domain
  error_log /var/log/nginx/example.com.error; # 에러로그
  access_log /var/log/nginx/example.com.access  main; # 접근로그

  location / {
    index  index.html; # index 파일은 index.html
  }
}

SPA 설정일 경우

parameter 존재시 모두 index.html 파일을 참조하도록 설정
SPA(Single Page Application) 일경우 설정법
가령 http://example.com/arg1/arg2... 로 접근할때 모두 index.html 파일을 호출하게 함

server {
  ........
  location / {
    index  index.html;
    try_files $uri $uri/ /index.html$is_args$args;
  }
}

PHP 설정

기본설정

server
{
  listen       80;
  server_name  www.example.com;
  .....
  location / {
    root   /home/project/www;
    index  index.html index.php; # index로 index.php 추가 지정

    location ~* \.php$ {
      fastcgi_pass unix:/run/php/php7.4-fpm.sock;
      fastcgi_index   index.php;
      fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      include         fastcgi_params;
    }
  }

라라벨 같은 index.php에서 모든 것을 제어하는 것일 경우

위의 SPA 설정 참조

server {
  listen 80;
  root /home/project/www;
  index index.php;
  server_name example.com www.example.com;

  location / { # 이 부분이 중요하다.
    try_files $uri $uri/ /index.php$is_args$args;
  }

  location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php7.4-fpm.sock;
  }

  location ~ /\.ht {
          deny all;
  }
}


기타옵션 적용

server
{
  listen       80;
  server_name  www.example.com;
  client_max_body_size 100m; # [optional] 파일 업로드 크기 제한 설정
  .....
  location / {
    root   /home/project/www;
    index  index.html index.php; # index로 index.php 추가 지정

    location ~* \.php$ {
      
      # try_files $uri $uri/ =404; # 아래구문 대신 사용 가능

      fastcgi_split_path_info ^(.+?\.php)(/.*)$;
      if (!-f $document_root$fastcgi_script_name) { // [optional] 파일이 없을 경우 404 리턴
        return 404;
      }

      fastcgi_pass unix:/run/php/php7.4-fpm.sock;
      fastcgi_index   index.php;

      fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      include         fastcgi_params;
    }
    
    # 아래는 옵션으로 expires 을 둚으로서 캐시설정
    location ~* \.(?:manifest|appcache|html?|xml|json)$ {
      expires -1;
    }

    location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|mp3|ogg|ogv|webm|htc)$ {
      expires 1M;
      access_log off;
      add_header Cache-Control "public";
    }

    location ~* \.(?:css|js)$ {
      expires 1y;
      access_log off;
      add_header Cache-Control "public";
    }

  }

강제로 https 로 전환(force redirect to ssl)

server {
  listen 80;
  server_name example.com www.example.com;
  root html;
  
  location / {
    return 301 https://example.com$request_uri;
  }
}

강제로 www 붙이기

server {
  listen 80;
  server_name example.com;
  root html;
  
  location / {
    # return 301 $scheme://www.example.com$request_uri;
    return 301 http://www.example.com$request_uri;
  }
}

server {
  listen 443 ssl;

  ssl_certificate /etc/ssl/example.com/example.com.pem;
  ssl_certificate_key /etc/ssl/example.com/example.com.key;

  server_name example.com;
  root html;
  location / {
    return 301 https://www.example.com$request_uri;
  }
}

rewrite

server
{
  listen 80;
  server_name example.com www.example.com;
  rewrite ^ http://www.example.com$request_uri? permanent;
}

ssl 설정시

server
{
  listen       443 ssl;
  #passenger_enabled off;

  #ssl     on;
  ssl_certificate /etc/ssl/example.com/example.com.pem;
  ssl_certificate_key /etc/ssl/example.com/example.com.key;
  server_name  example.com www.example.com;
  error_log /var/log/nginx/example.com.error;
  access_log /var/log/nginx/example.com.access;
  client_max_body_size 100M;
  location /
  {
    root /home/example/www;
    index  index.html index.php;

    location ~ \.php$ {
      #fastcgi_pass   127.0.0.1:9000;
      fastcgi_pass unix:/run/php/php7.4-fpm.sock;
      fastcgi_index  index.php;
      fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      include        fastcgi_params;
    }

    ..........
  }
}

proxy 설정

특정 domain을 내부 port로 proxy 설정
저는 nodejs로 서버를 돌릴경우 그 80포터를 nodejs가 사용하는 port로 변경할때 사용

server {
  listen 80;
  server_name socket.example.com;

  access_log /var/log/nginx/example.com.access;
  error_log /var/log/nginx/example.com.error;

  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarder-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_pass http://127.0.0.1:3102; # 3102 포터로 돌린다.
    proxy_redirect off;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_http_version 1.1;
  }
}
평점을 남겨주세요
평점 : 5.0
총 투표수 : 1

질문 및 답글