Hello all,
Need to help with such thing.
My partner's shop built with OpenCart 2.2.
It was Toooo slow on Apache. I move it onto nginx+fastcgi.
Result is excellent, but... cart have cached too. And dropped while user changes a page.
My config (from sites.available
$cat /etc/nginx/sites-available/vps1.conf
fastcgi_cache_path /var/www/cache/vps1 levels=1:2 keys_zone=vps1:1000m inactive=168h;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
# Expires map
map $sent_http_content_type $expires {
default off;
text/html epoch;
text/css max;
application/javascript max;
~image/ max;
}
server {
root /var/www/vps1/html/;
index index.php index.html;
server_name vps1.com.ct;
error_log /var/log/nginx/vps1_error.log;
access_log /var/log/nginx/vps1_access.log;
expires $expires;
location /image/data {
autoindex on;
}
location /admin {
index index.php;
}
location / {
try_files $uri @opencart;
}
location @opencart {
rewrite ^/(.+)$ /index.php?_route_=$1 last;
}
location ~* \.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(\..*|Entries.*|Repository|Root|Tag|Template)$|\.php_ {
deny all;
}
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
location ~* \.(jpg|jpeg|png|gif|css|js|ico)$ {
expires max;
log_not_found off;
}
# Fastcgi cache rules
include snippets/fastcgi-cache.conf;
include snippets/limits.conf;
location ~ \.php$ {
try_files $uri =404;
include snippets/fastcgi-params.conf;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
fastcgi_cache vps1;
fastcgi_cache_valid 168h;
fastcgi_read_timeout 6000;
fastcgi_connect_timeout 6000;
fastcgi_send_timeout 6000;
proxy_read_timeout 6000;
proxy_connect_timeout 6000;
proxy_send_timeout 6000;
send_timeout 6000;
}
===
cat /etc/nginx/snippets/fastcgi-cache.conf
# The key to use when saving cache files, which will run through the MD5 hashing algorithm.
fastcgi_cache_key "$scheme$request_method$host$request_uri";
# If an error occurs when communicating with FastCGI server, return cached content.
# Useful for serving cached content if the PHP process dies or timeouts.
fastcgi_cache_use_stale error timeout invalid_header http_500;
# Allow caching of requests which contain the following headers.
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
### Answer STALE and update cache
fastcgi_cache_use_stale updating;
fastcgi_cache_background_update on;
# Show the cache status in server responses.
add_header Fastcgi-Cache $upstream_cache_status;
# Don't skip by default
set $skip_cache 0;
# POST requests and urls with a query string should always go to PHP
if ($request_method = POST) {
set $skip_cache 1;
}
if ($query_string != "") {
set $skip_cache 1;
}
====
I suppose that ESI might be a solution. But I cannot find exitsted one...
Thanls a lot for help and advise.
WF
Need to help with such thing.
My partner's shop built with OpenCart 2.2.
It was Toooo slow on Apache. I move it onto nginx+fastcgi.
Result is excellent, but... cart have cached too. And dropped while user changes a page.
My config (from sites.available
$cat /etc/nginx/sites-available/vps1.conf
fastcgi_cache_path /var/www/cache/vps1 levels=1:2 keys_zone=vps1:1000m inactive=168h;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
# Expires map
map $sent_http_content_type $expires {
default off;
text/html epoch;
text/css max;
application/javascript max;
~image/ max;
}
server {
root /var/www/vps1/html/;
index index.php index.html;
server_name vps1.com.ct;
error_log /var/log/nginx/vps1_error.log;
access_log /var/log/nginx/vps1_access.log;
expires $expires;
location /image/data {
autoindex on;
}
location /admin {
index index.php;
}
location / {
try_files $uri @opencart;
}
location @opencart {
rewrite ^/(.+)$ /index.php?_route_=$1 last;
}
location ~* \.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(\..*|Entries.*|Repository|Root|Tag|Template)$|\.php_ {
deny all;
}
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
location ~* \.(jpg|jpeg|png|gif|css|js|ico)$ {
expires max;
log_not_found off;
}
# Fastcgi cache rules
include snippets/fastcgi-cache.conf;
include snippets/limits.conf;
location ~ \.php$ {
try_files $uri =404;
include snippets/fastcgi-params.conf;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
fastcgi_cache vps1;
fastcgi_cache_valid 168h;
fastcgi_read_timeout 6000;
fastcgi_connect_timeout 6000;
fastcgi_send_timeout 6000;
proxy_read_timeout 6000;
proxy_connect_timeout 6000;
proxy_send_timeout 6000;
send_timeout 6000;
}
===
cat /etc/nginx/snippets/fastcgi-cache.conf
# The key to use when saving cache files, which will run through the MD5 hashing algorithm.
fastcgi_cache_key "$scheme$request_method$host$request_uri";
# If an error occurs when communicating with FastCGI server, return cached content.
# Useful for serving cached content if the PHP process dies or timeouts.
fastcgi_cache_use_stale error timeout invalid_header http_500;
# Allow caching of requests which contain the following headers.
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
### Answer STALE and update cache
fastcgi_cache_use_stale updating;
fastcgi_cache_background_update on;
# Show the cache status in server responses.
add_header Fastcgi-Cache $upstream_cache_status;
# Don't skip by default
set $skip_cache 0;
# POST requests and urls with a query string should always go to PHP
if ($request_method = POST) {
set $skip_cache 1;
}
if ($query_string != "") {
set $skip_cache 1;
}
====
I suppose that ESI might be a solution. But I cannot find exitsted one...
Thanls a lot for help and advise.
WF