PyroCMS is a CMS built on top of Codeigniter, and I'm using a module called Pyrostreams. But the reason I'm posting here is because this is actually about nginx config as Apache works fine. Everything about the entire setup works fine on nginx, except it appears to be trying to call a couple of files from a "virtual" directory, which doesn't exist. Here's the log entry: "GET /streams_core/field_asset/css/datetime/datepicker.css HTTP/1.1" 404 The file actually exists in /www/cms/system/cms/modules/streams_core/field_types/datetime/css The author says it works just fine in Apache, and isn't able to install nginx himself. However, here's what he replied with: And yes, I do get a blank page, rather than a 404, so I suppose that shows it's hitting the controller OK? Here's the nginx config that Pyrocms suggest: http://docs.pyrocms.com/2.1/manual/...ernate-server-environments/nginx-with-php-fpm Here's the complete nginx config file I'm using: https://gist.github.com/3419706 And here's the .htaccess file that comes with the application (for those using Apache) https://gist.github.com/3419710 Been round in a few circles trying to figure this out - a bit lost now. Any ideas would be appreciated.
First, you should escape the dots in the location directives because otherwise they are not treated as dots, bit as placeholders for a character. So Code: location ~* .(?:ico|css|js|gif|jpe?g|png)$ { expires max; add_header Pragma public; add_header Cache-Control "public, must-revalidate, proxy-revalidate"; } location ~ .php { fastcgi_pass unix:/var/lib/php5-fpm/web8.sock; fastcgi_split_path_info ^(.+.php)(.*)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; # PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200; fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors off; } should be Code: location ~* [COLOR="Red"]\[/COLOR].(?:ico|css|js|gif|jpe?g|png)$ { expires max; add_header Pragma public; add_header Cache-Control "public, must-revalidate, proxy-revalidate"; } location ~ [COLOR="Red"]\[/COLOR].php { fastcgi_pass unix:/var/lib/php5-fpm/web8.sock; fastcgi_split_path_info ^(.+.php)(.*)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; # PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200; fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors off; } Second, the author says that the css request should be passed to the PHP interpreter which doesn't happen because this location matches: Code: location ~* .(?:ico|css|js|gif|jpe?g|png)$ { expires max; add_header Pragma public; add_header Cache-Control "public, must-revalidate, proxy-revalidate"; } I therefore suggest you comment out that location and reload nginx.
Falko, once again you have solved a problem that many others couldn't. Thank you! My only concern now would be how I would make that js and css that was served via the interpretor compressible and cache-able - not sure I can? But at least the form is working properly now! Worth every penny of the subscription (which I had running for ages but only cancelled last month when I changed PP account... so I was giving a little back for a while - will have to resub!)
I think you have to do this by PHP (that is, your application has to do). Maybe it can compress and/or minify the files and also set the correct cache headers.