# Конфигурация Nginx

Серверная и клиентская части запускаются на разных конечных точках, например клиентская часть mysite.site, серверная часть mysite.site/api.

# HTTP2 + HTTPS

server {
    listen 443 http2;         # https port
    listen [::]:443 http2;    # IP v6

    server_name mysite.site;  # домен

    charset utf-8;

    ssl on;    # включаем ssl
    ssl_certificate /etc/ssl/mysite.site/mysite.ite.srt;         # Путь к ssl сертификату
    ssl_certificate_key /etc/ssl/mysite.site/mysite.site.key;    # Путь к ключу сертификата 
    gzip on;   # включаем gzip архивацию потока данных

    gzip_buffers 16 8k;
    gzip_comp_level 6;
    gzip_http_version 1.1;
    gzip_min_length 256;
    gzip_proxied any;
    gzip_vary on;
    gzip_types text/xml application/atom+xml application/rss+xml application/xhtml+xml text/javascript application/javascript
    application/x-javascript text/x-json application/json application/x-web-app-manifest+json text/css text/plain
    text/html font/opentype application/x-font-ttf image/x-icon image/svg+xml;
    gzip_disable "msie6";

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    # Endpoint для клиентской части
    location / {   
       root /site/mysite.site/wwwroot;
       try_files $uri $uri/ /index.html;   # если файл не найден - возвращаем index.html

       open_file_cache max=1000 inactive=20s; # кеширование файлов клиента на сервере
       open_file_cache_valid 30s;
       open_file_cache_min_uses 2;
       open_file_cache_errors on;

       # кеширование в браузере
       location ~ \.(js|json|css|svg|svgz|eot|otf|woff|woff2|ttf|rss|atom|ico|jpg|jpeg|gif|png)$ {
           expires 14d; # хранить кеш 14 дней
       }
    }
    # Endpoint для серверной части. Работает как reverse proxy отправляя запросы в Kestrel работающим отдельным процессом.
    location /api/ {   
           proxy_pass http://localhost:5000/; # Порт должен соответствовать настройкам kestrel в SunEngine.json
           client_max_body_size 11M;  # максимальный размер тела запроса, который допускает Nginx ~= максимальный размер для upload файла
    }

server {  # редирект в случае входа через http
    listen 80;
    listen [::]:80;

    server_name mysite.site;
    return 301 https://$host$request_uri;
}

Для работы необходимо запустить Kestrel сервис отдельным процессом.

Инструкция в статье.

Порт Kestrel в /Config/SunEngine.json должен совпадать с портом конфигурации в nginx.

# HTTP

Использовать только для целей разработки или тестирования. Не использовать на production.

server {
    listen 80; # http порт
    listen [::]:80;

    server_name mysite.site; # домен
         
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";
     
    charset utf-8;
         
    # Endpoint для клиентской части
    location / {   
       root /site/mysite.site/wwwroot;
       try_files $uri $uri/ /index.html;   # если файл не найден - возвращаем index.html
     }

    # Endpoint для серверной части. Работает как  reverse proxy отправляя запросы в Kestrel работающий отдельным процессом.  
    location /api/ {   
       proxy_pass  http://localhost:5000/;   # Порт должен соответствовать настройкам kestrel в "/Config/SunEngine.json"
            
       client_max_body_size 11M;  # максимальный размер тела запроса, который допускает Nginx ~= максимальный размер для upload файла  
    }
}