user2723490
user2723490

Reputation: 2100

Adding expire headers in nginx

It used to be so easy to set header expiration with apache mod_headers, but I am having a hard time to figure out where to add it in nginx confi file. This is my nginx.conf:

#user  nginx;
worker_processes  1;

#error_log  /var/log/nginx/error.log;
#error_log  /var/log/nginx/error.log  notice;
#error_log  /var/log/nginx/error.log  info;

#pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #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  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    #tcp_nodelay        on;
    tcp_nodelay        on;

    gzip  on;
    gzip_http_version 1.1;
    #gzip_http_version 1.0;
    gzip_vary on;
    gzip_comp_level 6;
    gzip_proxied any;
    gzip_types text/plain text/html text/css application/x-javascript text/xml;
    #gzip_min_length  1100;
    gzip_buffers 16 8k;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";

    server_tokens off;

    include /etc/nginx/conf.d/*.conf;

}

Where should I add the header expiration part like

location ~* \.(js|css)$ {
  expires 30d;
}

I tried adding it inside "http" or including in another block "server", but it generates errors like unknown directive "server" or "location".

Upvotes: 0

Views: 4614

Answers (2)

foibs
foibs

Reputation: 3406

It is as easy to add expires headers in nginx. You need to place your location block inside a server block. There must be a default file in /your/nginx_dir/sites-enabled/. If it is you can edit it directly and add your location block inside it, or you can copy the the whole content of the default file inside the http block of your nginx.conf.

If you choose to edit the default file in place, don't forget to add a line like this in your nginx.conf

include /etc/nginx/sites-enabled/*;

If you can't find the default file, just edit your nginx.conf so it will look like this

#....
server_tokens off;
#up to here the conf is the same as yours

#edit starts here, just add this server block
server {
    #default_server is not necessary but is useful if you have many servers 
    #and want to capture requests where the host header doesn't match any server name
    listen       80 default_server;
    #requests with host header that matches server name will be handled by this server
    server_name  your.domain.com localhost; 

    #change your document root accordingly
    root /path/to/your/html/root; 

    #you can have as many location blocks as you need
    location ~* \.(js|css)$ {
        expires 30d;
    }
}
#end of conf changes

include /etc/nginx/conf.d/*.conf;

Since you are coming from apache, just think of nginx's server as apache's VirtualHost. Don't forget to reload nginx after each change in the conf files

Upvotes: 4

Mohammad AbuShady
Mohammad AbuShady

Reputation: 42799

check inside /etc/nginx/conf.d/ you'll probably find a file called default then you'll find the location / inside here.

Upvotes: 0

Related Questions