user moviepilot;
worker_processes auto;
worker_cpu_affinity auto;


events {
    worker_connections 1024;
}


http {

    # 设置缓存路径和缓存区大小
    proxy_cache_path /tmp levels=1:2 keys_zone=my_cache:10m max_size=100m inactive=60m use_temp_path=off;

    sendfile on;

    keepalive_timeout 3600;

    server {

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        listen ${NGINX_PORT};
        listen [::]:${NGINX_PORT};
        server_name moviepilot;

        location / {
            # 主目录
            expires off;
            add_header Cache-Control "no-cache, no-store, must-revalidate";
            root /public;
            try_files $uri $uri/ /index.html;
        }

        location /assets {
            # 静态资源
            expires 7d;
            add_header Cache-Control "public";
            root /public;
        }

        location /api/v1/site/icon/ {
            # 站点图标缓存
            proxy_cache my_cache;
            # 缓存响应码为200和302的请求1小时
            proxy_cache_valid 200 302 1h;
            # 缓存其他响应码的请求5分钟
            proxy_cache_valid any 5m;
            # 缓存键的生成规则
            proxy_cache_key "$scheme$request_method$host$request_uri";
            proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;

            # 向后端API转发请求
            proxy_pass http://backend_api;
        }

        location ~ ^/api/v1/system/(message|progress/) {
            # SSE MIME类型设置
            default_type text/event-stream;

            # 禁用缓存
            add_header Cache-Control no-cache;
            add_header X-Accel-Buffering no;
            proxy_buffering off;
            proxy_cache off;

            # 代理设置
            proxy_pass http://backend_api;
            proxy_http_version 1.1;
            proxy_set_header Connection "";
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            # 超时设置
            proxy_read_timeout 3600s;
        }

        location /api {
            # 后端API
            proxy_pass http://backend_api;
            rewrite ^.+mock-server/?(.*)$ /$1 break;
            proxy_http_version 1.1;
            proxy_buffering off;
            proxy_cache off;
            proxy_redirect off;
            proxy_set_header Connection "";
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-Nginx-Proxy true;

            # 超时设置
            proxy_read_timeout 600s;
        }
    }

    upstream backend_api {
        # 后端API的地址和端口
        server 127.0.0.1:${PORT};
        # 可以添加更多后端服务器作为负载均衡
    }

}
