How to remove ETag in nginx from the response header?

11,286

Just add etag off; in the http block of your nginx config

Share:
11,286

Related videos on Youtube

Shubhanshoo Agarwal
Author by

Shubhanshoo Agarwal

Updated on June 04, 2022

Comments

  • Shubhanshoo Agarwal
    Shubhanshoo Agarwal almost 2 years

    I want to remove the ETag from my response header. I am using a nginx server. I have looked through various posts and blogs but could not find the correct way to remove it. All I could find regarding removing ETag was what's given in the official documentation but could not make exactly how to use it. Any help would be greatly appreciated.

    I added the "etag off" to my file at path "/etc/nginx/nginx.conf" within the http blocknginx.conf

    I reloaded my nginx server using the command "service nginx reload" but even after that my application returned the Etags in my response header.Response Header

        nginx: [warn] conflicting server name "ndfsy.example.com" on 0.0.0.0:80, ignored
    nginx: [warn] conflicting server name "www.jhvdshjfy.example.com" on 0.0.0.0:80, ignored
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    # configuration file /etc/nginx/nginx.conf:
    user www-data;
    worker_processes auto;
    pid /run/nginx.pid;
    
    events {
        worker_connections 768;
        # multi_accept on;
    }
    
    http {
    
    
    
        ##
        # Basic Settings
        ##
    
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;
        etag off;
    
        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;
    
        include /etc/nginx/mime.types;
        default_type application/octet-stream;
    
        ##
        # SSL Settings
        ##
    
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;
    
        ##
        # Logging Settings
        ##
    
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;
    
        ##
        # Gzip Settings
        ##
    
        gzip on;
        gzip_disable "msie6";
    
        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    
        ##
        # Virtual Host Configs
        ##
    
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
    
    }
    
    
    #mail {
    #   # See sample authentication script at:
    #   # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
    #
    #   # auth_http localhost/auth.php;
    #   # pop3_capabilities "TOP" "USER";
    #   # imap_capabilities "IMAP4rev1" "UIDPLUS";
    #
    #   server {
    #       listen     localhost:110;
    #       protocol   pop3;
    #       proxy      on;
    #   }
    #
    #   server {
    #       listen     localhost:143;
    #       protocol   imap;
    #       proxy      on;
    #   }
    #}
    
    # configuration file /etc/nginx/mime.types:
    
    types {
        text/html                             html htm shtml;
        text/css                              css;
        text/xml                              xml;
        image/gif                             gif;
        image/jpeg                            jpeg jpg;
        application/javascript                js;
        application/atom+xml                  atom;
        application/rss+xml                   rss;
    
        text/mathml                           mml;
        text/plain                            txt;
        text/vnd.sun.j2me.app-descriptor      jad;
        text/vnd.wap.wml                      wml;
        text/x-component                      htc;
    
        image/png                             png;
        image/tiff                            tif tiff;
        image/vnd.wap.wbmp                    wbmp;
        image/x-icon                          ico;
        image/x-jng                           jng;
        image/x-ms-bmp                        bmp;
        image/svg+xml                         svg svgz;
        image/webp                            webp;
    
        application/font-woff                 woff;
        application/java-archive              jar war ear;
        application/json                      json;
        application/mac-binhex40              hqx;
        application/msword                    doc;
        application/pdf                       pdf;
        application/postscript                ps eps ai;
        application/rtf                       rtf;
        application/vnd.apple.mpegurl         m3u8;
        application/vnd.ms-excel              xls;
        application/vnd.ms-fontobject         eot;
        application/vnd.ms-powerpoint         ppt;
        application/vnd.wap.wmlc              wmlc;
        application/vnd.google-earth.kml+xml  kml;
        application/vnd.google-earth.kmz      kmz;
        application/x-7z-compressed           7z;
        application/x-cocoa                   cco;
        application/x-java-archive-diff       jardiff;
        application/x-java-jnlp-file          jnlp;
        application/x-makeself                run;
        application/x-perl                    pl pm;
        application/x-pilot                   prc pdb;
        application/x-rar-compressed          rar;
        application/x-redhat-package-manager  rpm;
        application/x-sea                     sea;
        application/x-shockwave-flash         swf;
        application/x-stuffit                 sit;
        application/x-tcl                     tcl tk;
        application/x-x509-ca-cert            der pem crt;
        application/x-xpinstall               xpi;
        application/xhtml+xml                 xhtml;
        application/xspf+xml                  xspf;
        application/zip                       zip;
    
        application/octet-stream              bin exe dll;
        application/octet-stream              deb;
        application/octet-stream              dmg;
        application/octet-stream              iso img;
        application/octet-stream              msi msp msm;
    
        application/vnd.openxmlformats-officedocument.wordprocessingml.document    docx;
        application/vnd.openxmlformats-officedocument.spreadsheetml.sheet          xlsx;
        application/vnd.openxmlformats-officedocument.presentationml.presentation  pptx;
    
        audio/midi                            mid midi kar;
        audio/mpeg                            mp3;
        audio/ogg                             ogg;
        audio/x-m4a                           m4a;
        audio/x-realaudio                     ra;
    
        video/3gpp                            3gpp 3gp;
        video/mp2t                            ts;
        video/mp4                             mp4;
        video/mpeg                            mpeg mpg;
        video/quicktime                       mov;
        video/webm                            webm;
        video/x-flv                           flv;
        video/x-m4v                           m4v;
        video/x-mng                           mng;
        video/x-ms-asf                        asx asf;
        video/x-ms-wmv                        wmv;
        video/x-msvideo                       avi;
    }
    
    # configuration file /etc/nginx/sites-enabled/default:
    # IP Redirection configuration
    server {
        listen 80;
        server_name 161.202.19.190;
        return 301 $scheme://exampel.com$request_uri;
    }
    # http Redirection configuration
    server {
        listen 80;
        server_name abc.demo.com www.example.demo.com;
        rewrite ^/(.*) https://example.com/$1 permanent;
    }
    server {
            listen 80;
            server_name abc.com www.example.com;
            rewrite ^/(.*) https://example.com/403 permanent;
    }
    # Default server configuration
    # Note: There can only be one default server block
    server {
            listen 80 default_server;
            listen [::]:80 default_server;
        listen 443 ssl;
            client_max_body_size 51M;
        client_header_buffer_size 2048k;
        large_client_header_buffers 4 2048k;
          proxy_connect_timeout   300s;
    proxy_read_timeout        300s;
    proxy_send_timeout        300s;
        proxy_buffer_size   2048k;
        proxy_buffers   4 2048k;
        proxy_busy_buffers_size   2048k;
    
            root /var/www/html;
    
    
     proxy_set_header        X-Real-IP       $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    
            # Secure NGINX from Clickjacking attack
            add_header X-Frame-Options "SAMEORIGIN";
    
            server_name example.com www.example.com;
            ssl_certificate /home/devops/key/example.com.chained.crt;
            ssl_certificate_key /home/devops/key/example.com.key;
    
            underscores_in_headers on;
    
        # disable SSLv3(enabled by default since nginx 0.8.19) since it's less secure then TLS
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            # enables server-side protection from BEAST attacks
        ssl_prefer_server_ciphers on;
            # ciphers chosen for forward secrecy and compatibility
        ssl_ciphers 'xxxxx+xxxxx:xxx+xxxxx:xxxxx+xxxxx:xxxxx+xxx';
    
        # don't send the nginx version number in error pages and Server header
        server_tokens off;
    
        add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block";
    
    
            location / {
                    proxy_pass http://127.0.0.1:4801;
                    proxy_http_version 1.1;
                    proxy_pass_request_headers on;
    
     #proxy_set_header Upgrade $http_upgrade;
                    #proxy_set_header Connection 'upgrade';
                    #proxy_set_header Host $host;
                    #proxy_cache_bypass $http_upgrade;
            }
    }
    
    # API Server Configuration
    server {
        listen 80;
        listen [::]:80;
    
        root /var/www/html;
    
        proxy_set_header        X-Real-IP       $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    
            # Secure NGINX from Clickjacking attack
            add_header X-Frame-Options "SAMEORIGIN";
    
            server_name developer.abc.com www.developer.abc.com;
        underscores_in_headers on;
    
        location / {
                    proxy_pass http://127.0.0.1:4802;
                    proxy_http_version 1.1;
            proxy_pass_request_headers on;
                    #proxy_set_header Upgrade $http_upgrade;
                    #proxy_set_header Connection 'upgrade';
                    #proxy_set_header Host $host;
                    #proxy_cache_bypass $http_upgrade;
            }
    }
    server {
            #listen 80;
            #listen [::]:80;
    
        listen 443 ssl;
    
            root /var/www/html;
    
            proxy_set_header        X-Real-IP       $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    
            # Secure NGINX from Clickjacking attack
            add_header X-Frame-Options "SAMEORIGIN";
    
            server_name api-test.abc.com www.api-test.abc.com;
            ssl_certificate /home/devops/key/abc.com.chained.crt;
            ssl_certificate_key /home/devops/key/abc.com.key;
    
            underscores_in_headers on;
    
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_prefer_server_ciphers on;
            ssl_ciphers 'xxxxx+xxxxx:xxx+xxxxx:xxxxx+xxxxx:xxxxx+xxx';
    
        error_page 403 /403;
            location /403{
            default_type application/json;
                    return 403 '{"statusCode":403,"error":"Forbidden Request","message":"Only https request are allowed"}';
            }
    
            location / {
                    proxy_pass http://127.0.0.1:4803;
                    proxy_http_version 1.1;
                    proxy_pass_request_headers on;
                    #proxy_set_header Upgrade $http_upgrade;
                    #proxy_set_header Connection 'upgrade';
                    #proxy_set_header Host $host;
                    #proxy_cache_bypass $http_upgrade;
            }
    }
    

    This is the response from nginx -T

  • Shubhanshoo Agarwal
    Shubhanshoo Agarwal over 6 years
    I added this but still my application is showing the Etags in the response header. Please check the edited question. I have added images to give an idea as to what exactly I am doing.
  • Tarun Lalwani
    Tarun Lalwani over 6 years
    Post output of nginx -T in your question
  • Shubhanshoo Agarwal
    Shubhanshoo Agarwal over 6 years
    The output of nginx -T has been addded in the question please take a look
  • Tarun Lalwani
    Tarun Lalwani over 6 years
    Can you do a curl -I http://127.0.0.1:4801 and see if the ETag is being returned by the proxied site?
  • Shubhanshoo Agarwal
    Shubhanshoo Agarwal over 6 years
    Using curl -I http://127.0.0.1:4801 etag was not returned. Could you help me further.
  • Binar Web
    Binar Web almost 6 years
    I've added etag off; in /etc/nginx/nginx.conf under http section and it works perfectly. Thanks!
  • jjoselon
    jjoselon over 4 years
    Do you reload nginx server to take changes ?
  • Tarun Lalwani
    Tarun Lalwani over 4 years
    Reload is always needed after a config change