2016-10-25 3 views
0

Я использую WordPress с Nginx, но всякий раз, когда я пытаюсь включить кеширование статических файлов, они не отображаются на 404.Nginx Caching 404

Это мой /etc/nginx/conf.d/default.conf файл:

server { 
    listen 80; 
    server_name _; 

# SSL configuration 
listen 443 ssl default_server; 
ssl_certificate /etc/letsencrypt/live/shivampaw.com/fullchain.pem; 
ssl_certificate_key /etc/letsencrypt/live/shivampaw.com/privkey.pem; 
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
ssl_prefer_server_ciphers on; 
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; 
ssl_dhparam /etc/nginx/ssl/dhparams.pem; 
ssl_session_timeout 30m; 
ssl_session_cache shared:SSL:10m; 
ssl_buffer_size 8k; 
add_header Strict-Transport-Security max-age=31536000; 

    location/{ 
     root /home/shivam/sites/shivampaw.com; 
     index index.php index.html index.htm; 
     try_files $uri $uri/ /index.php?$args; 
    } 

    error_page 404    /404.html; 
    location = /404.html { 
     root /usr/share/nginx/html; 
    } 

    # redirect server error pages to the static page /50x.html 
    # 
    error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
     root /usr/share/nginx/html; 
    } 

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80 
    # 
    #location ~ \.php$ { 
    # proxy_pass http://127.0.0.1; 
    #} 

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 
    # 
    location ~ \.php$ { 
     root   /home/shivam/sites/shivampaw.com; 
     fastcgi_pass 127.0.0.1:9000; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     include  fastcgi_params; 
    } 

    # deny access to .htaccess files, if Apache's document root 
    # concurs with nginx's one 
    # 
    #location ~ /\.ht { 
    # deny all; 
    #} 

gzip on; 
gzip_vary on; 
gzip_proxied any; 
gzip_comp_level 9; 
gzip_buffers 16 8k; 
gzip_http_version 1.1; 
gzip_types text/plain text/css application/json applicationx-javascript text/xml application/xml application/xml+rss text/javascript; 

include wordpress/wordpress.conf; 

И это файл WordPress.conf:

location = /favicon.ico { 
     log_not_found off; 
     access_log off; 
} 

location = /robots.txt { 
     allow all; 
     log_not_found off; 
     access_log off; 
} 

# Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac). 
# Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban) 
location ~ /\. { 
     deny all; 
} 

# Deny access to any files with a .php extension in the uploads directory 
# Works in sub-directory installs and also in multisite network 
# Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban) 
location ~* /(?:uploads|files)/.*\.php$ { 
     deny all; 
} 


# Add trailing slash to */wp-admin requests. 
rewrite /wp-admin$ $scheme://$host$uri/ permanent; 

При том, что он работает нормально. Но если добавить

# Media: images, icons, video, audio, HTC 
location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ { 
    expires 1M; 
    access_log off; 
    add_header Cache-Control "public"; 
} 

# CSS and Javascript 
location ~* \.(?:css|js)$ { 
    expires 1y; 
    access_log off; 
    add_header Cache-Control "public"; 
} 

К концу wordpress.conf и перезапустить Nginx и перезагрузить мой сайт все статические файлы придумать 404.

Так что я комментировать, что кэширование, и он отлично работает ,

Любые идеи?

404s Single 404

Это означает, что, если я включаю Wp-rocket.conf (я использую его), она также дает 404, так как сор-rocket.conf имеет кэширование вещи в нем.

Итак, почему я не могу кэшировать статические файлы?

+0

Это потому, что вы определили свой корень в корневом блоке. Поэтому другие блоки местоположения не знают об этом. Это плохая практика (см. [Здесь] (https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/)). Эти блоки местоположения не знают, где искать файлы. У вас должен быть 'root /home/shivam/sites/shivampaw.com;' над вашим блоком 'location/{', а затем добавить 'try_files $ uri $ uri//index.php? $ Args' к каждому из ваших статических блоки. Другой способ сделать это - сохранить свой конфиг, но добавить к каждому блоку 'alias/path/to/static/files /;'. –

+0

Спасибо @KeenanLawrence - не стесняйтесь публиковать это как ответ :) – Shiv

+0

Это пожалуйста @shiv. Примите ответ :) –

ответ

2

Это потому, что вы определили свой корень в корневом блоке. Поэтому другие блоки местоположения не знают об этом. Это плохая практика (см. here). Эти блоки местоположения не знают, где искать файлы.

Вы должны иметь root /home/shivam/sites/shivampaw.com; над вашим блоком location/{, а затем добавить try_files $uri $uri/ /index.php?$args к каждому из ваших статических блоков.

Другой способ сделать это - сохранить конфигурацию, но добавьте alias /path/to/static/files/; к каждому блоку.

Смежные вопросы