Mich wundert das nicht, der vhost ist schlicht weg nicht richtig konfiguriert!
php-fpm mit Sockets, ist im Übrigen sicherer und schneller wie fastcgi.
Zudem solltest Du Dich dringend mit der Absicherung von nginx beschäftigen.
Stichpunkte sind da:
- nginx-Proxi (den man auf der selben Maschine davor hängen kann)
- Brutforce
- X-Frame-Options
- X-Content-Type-Options
- X-XSS-Protection
- Strict-Transport-Security (bei Verwendung von SSL)
- naxsi
Gibt noch ein paar Sachen mehr, aber das sollte erst mal reichen.
Versuch es mal auf folgende Art und Weise, danach sollte die Seite korrekt und sogar mit Link-Umschreibung auf .html funktionieren:
/etc/nginx/nginx.conf (System weite Konfiguration)
Code:
user www-data;
# worker_processes = Anzahl der CPU-Kerne
worker_processes 4;
worker_rlimit_core 500M;
worker_rlimit_nofile 8192;
working_directory /tmp/;
error_log /var/log/nginx/error.log info;
pid /run/nginx.pid;
events {
worker_connections 1024;
use epoll;
# multi_accept on;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
types_hash_max_size 2048;
# logging formatieren
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;
# Basis-Konfigurationen
# sendfile off;
sendfile on;
server_name_in_redirect off;
server_names_hash_max_size 2048;
server_names_hash_bucket_size 512;
# nginx-Version verstecken für alle vhost
server_tokens off;
# Systemlinks System weit aktivieren, kann auch im vhost geschehen
disable_symlinks off;
# Performance
tcp_nopush on;
tcp_nodelay on;
# timeouts deklarieren
ignore_invalid_headers on;
client_max_body_size 10m;
client_body_timeout 60s;
client_header_timeout 60s;
keepalive_timeout 10s;
send_timeout 60s;
client_header_buffer_size 4k;
large_client_header_buffers 4 64k;
output_buffers 4 32k;
postpone_output 1460;
# gzip Kompression
gzip on;
gzip_static on;
gzip_buffers 4 32k;
gzip_comp_level 9;
gzip_http_version 1.0;
gzip_min_length 1100;
gzip_types text/css text/javascript text/mathml text/plain text/xml application/x-javascript application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml;
gzip_vary on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
# SSL Konfiguration
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
# die meisten statischen Files cachen
open_file_cache max=10000 inactive=10m;
open_file_cache_valid 2m;
open_file_cache_min_uses 1;
open_file_cache_errors on;
# virtual host Konfigrationen einbinden
#include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Einige Konfigurationen müssen vielleicht an Dein System angepasst werden.
/etc/nginx/sites-enabled/##vhost## (oder wo auch immer Deine vhosts liegen)
Code:
server {
listen 80;
server_name meine.domain;
root /srv/meine.domain/web;
index app.php;
access_log /LOGS/meine.domain_access_log;
error_log /LOGS/meine.domain_error_log;
autoindex on;
disable_symlinks off;
charset UTF-8;
# andere Header machen bei contao keinen Sinn, also sperren wir den Rest einfach mal aus
if ( $request_method !~ ^(GET|HEAD|POST)$ ) {
return 404;
}
location / {
try_files $uri $uri/ /app.php?$args;
if (-f $request_filename) {
expires 30d;
break;
}
# alle Adressen mit .html nach app.php parsen ohne Einfluss auf die Adresse im Browser
if (!-e $request_filename) {
rewrite ^(.*)\.html$ /app.php ;
expires 7d;
}
}
# folgende Dateiendungen werden in nginx nicht ausgeführt
# da nginx die Dateien als Text ausgeben würde, sperren wir gleich mal den direkten Zugriff
location ~* \.(tpl|html5|xhtml)$ {
deny all;
}
# PHP über fastcgi aktivieren, besser noch über PHP-FPM mit Sockets (sicherer und schneller)
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
# wenn die Adressierung nicht passt Fehlermeldung ausgeben
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
# ein paar Deklarationen für fastcgi oder php-fpm ohne Sockets
fastcgi_pass php;
fastcgi_keep_conn on;
fastcgi_index app.php;
include fastcgi_params;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 4k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
# ein wenig caching für bestimmte Dateien
location ~* .(gif|jpg|jpeg|png|ico|wmv|3gp|avi|mpg|mpeg|mp4|flv|mp3|mid|js|css|wml|swf)$ {
access_log off;
log_not_found off;
expires max;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}
# htaccess-Dateien können sensible Daten enthalten, nginx kennt kein htaccess, also sperren wir den Zugriff permanent
location ~ /\.ht {
deny all;
}
# Logging für das favicon deaktivieren
location = /favicon.ico {
log_not_found off;
access_log off;
}
# man muss es nicht deklarieren, schadet aber auch nicht
location = /robots.txt {
deny all;
log_not_found off;
access_log off;
}
}
Die wichtigsten Dinge habe ich dokumentiert!
Sollten weitere Fragen sein, hilft sicherlich primär das nginx-wiki, ansonsten einfach fragen.
Bei mir läuft damit:
meine-domain
meine-domain/startseite.html (bei anderer Endung muss das überall wo .html im vhost vorkommt, geändert werden)
meine-domain/app.php/contao
meine-domain/app.php/contao/install