Score:0

How to solve duplicate MIME error when using reverse proxy in Nginx?

nl flag

I am trying to route from blog.example.com to example.com/blog using a reverse proxy.

The website is routing fine, but I am having an issue with the images not displaying and I am getting the following error message.

[warn] duplicate MIME type "text/html" in /etc/nginx/conf.d/example.conf

I'm getting a duplicate error with text/html in the sub_filter_types of my server block, but I can't find the cause.

sub_filter_types text/html text/css text/xml text/javascript application/json;

Can anyone give me some advice to fix this? Here are the nginx settings I'm using. I've removed all the unnecessary stuff.

Server Block

map $upstream_http_location $_upstream_http_location_prefix { # 1
  default $upstream_http_location; # 2
  "~^/"                 "/blog";   # 3
  "~*^http"             "";        # 4
  "~*^((?!http|\/).)*"  "/blog/";  # 5
}

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


server {
    listen       443 ssl http2;
    server_name  example.com www.example.com;
    root /var/www/example.com;
    index  index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$args;  
         add_header 'Access-Control-Allow-Origin' '*';
    }
        
        
    location /blog/wp-admin { return 301 /blog/404; }
    location /blog/wp-login.php { return 301 /blog/404; }

    # Prevent the blog's robots.txt from being proxied
    location /blog/robots.txt { return 404; }

 location /blog {
    rewrite /blog/(.*) /$1  break;
    rewrite ^([^.]*[^/])$ $1/ permanent;

    proxy_set_header Accept-Encoding "";

    sub_filter_once off;
    sub_filter_last_modified on;
    sub_filter_types text/html text/css text/xml text/javascript application/json;
    sub_filter 'blog.example.com' 'example.com/blog';

    sub_filter 'src="/wp-content/' 'src="/blog/wp-content/';
    
    proxy_hide_header Location;
    add_header Location "$_upstream_http_location_prefix$upstream_http_location";

    sub_filter 'http:' 'https:';

        proxy_pass https://blog.example.com;
   }


}

Nginx.conf

#load_module modules/ngx_http_cache_purge_module.so;
user  www-data;
worker_processes  1;
include /etc/nginx/modules-enabled/*.conf;



error_log  /var/log/nginx/error.log crit;
pid        /var/run/nginx.pid;

worker_rlimit_nofile 10000; 
events {
    worker_connections  1024;
    multi_accept off;
        use epoll;
    accept_mutex on;
}


http {
    charset           utf-8;

        server {
        charset        utf-8;
    }
        

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

    # 새롭게 추가 6월 15일
    sendfile_max_chunk 512k;

    #DDOS 보안    
    # limit the number of connections per IP
    limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;

    # limit the number of requests for this session
    limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s;

    log_format custom '[$time_local] | $remote_addr | $status HTTP |'
                                '$http_x_forwarded_for(실제IP) | "$request" (방문주소)|'
                                '"$http_referer" | '
                                '"$http_user_agent"'; 


    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log off;
    sendfile        on;
    tcp_nopush     on;
    tcp_nodelay on;
    server_tokens off;
    client_max_body_size 64m;
    add_header X-UA-Compatible "IE=Edge,chrome=1";


    client_body_timeout 14;
    client_header_timeout 14;
    keepalive_timeout 25;
    send_timeout 13;


    #gzip  on;
    #오픈파일캐쉬
    # 이걸로 다시 테스트
    open_file_cache max=3000 inactive=30s;
    open_file_cache_valid    60s;
    open_file_cache_min_uses 2;
    open_file_cache_errors   on;
    
    
    #open_file_cache max=1500 inactive=30s;
    #open_file_cache_valid 60s;
    #open_file_cache_min_uses 5;
    #open_file_cache_errors off; 
    
    
    fastcgi_cache_key "$scheme$request_method$host$request_uri";
    add_header Fastcgi-Cache $upstream_cache_status;
    
    fastcgi_cache_use_stale error timeout invalid_header http_500;
    fastcgi_ignore_headers Cache-Control Expires Set-Cookie;

    brotli on;
    brotli_comp_level 6;
    brotli_static on;
    brotli_types application/atom+xml application/javascript application/json application/rss+xml
       application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype
       application/x-font-ttf application/x-javascript application/xhtml+xml application/xml
       font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon
       image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml;
       
    include /etc/nginx/conf.d/*.conf;
        
        
    
}
Richard Smith avatar
jp flag
Looking at the [manual page](http://nginx.org/en/docs/http/ngx_http_sub_module.html#sub_filter_types) it says **in addition to "text/html"** - which makes me think that "text/html" is not required in the `sub_filter_types` list. Try removing "text/html" from your `sub_filter_types` statement.
I sit in a Tesla and translated this thread with Ai:

mangohost

Post an answer

Most people don’t grasp that asking a lot of questions unlocks learning and improves interpersonal bonding. In Alison’s studies, for example, though people could accurately recall how many questions had been asked in their conversations, they didn’t intuit the link between questions and liking. Across four studies, in which participants were engaged in conversations themselves or read transcripts of others’ conversations, people tended not to realize that question asking would influence—or had influenced—the level of amity between the conversationalists.