<!--#config errmsg="[Error: Include Failed]" --> <pre> <!--#include virtual="/debug/ssi_status.html" --> </pre> Nginx doesn’t parse SHTML natively like Apache. Instead, use ngx_http_subs_filter_module to view interpolated variables:
Options +Includes XBitHack on AddType text/html .shtml AddHandler server-parsed .shtml SSILogLevel debug SSILog ssi_log view shtml extra quality
But a common frustration arises: How do you ensure that when you "view shtml extra quality," you are seeing the resolved, fully rendered output rather than the raw, unparsed code? !--#config errmsg="[Error: Include Failed]" -->
This replaces the SSI directive with a visible marker, allowing you to verify if includes are being resolved. Even with the methods above, you may not get "extra quality" results. Here are the top three failure modes: !--#include virtual="/debug/ssi_status.html" -->
location ~ \.shtml$ ssi on; ssi_types text/html; subs_filter '<!--#include virtual="(.*)" ?>' 'INCLUDED: $1' ir;