nginx загружает скрипт php по HTTP, но не по HTTPS

Я nginx с php-fpm на моем сервере. Я настроил nginx с SSL (Let's Encrypt) и сделал HTTPS по умолчанию вместо HTTP. Проблема в том, что при доступе к сети через HTTP файл php загружается, но в HTTPS скрипт работает. Я перезапустил nginx / php, очистил кеш, попробовал другие браузеры, chmod, и проблема не исчезла.

Я использую ajenti в качестве панели управления, поэтому конфигурация создается автоматически.

client_max_body_size 128m;
large_client_header_buffers 4 64k;
add_header X-Content-Type-Options "nosniff";
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1;mode=block";
add_header X-Content-Security-Policy "allow 'self';";

ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/trustchain.pem;
resolver 8.8.8.8 8.8.4.4;

server {
    listen *:80 http2;
    listen *:443 ssl http2 default_server;
    ssl_certificate /etc/letsencrypt/live/domain.xyz/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/domain.xyz/privkey.pem;
    server_name domain.xyz;

    access_log /var/log/nginx/domainxyz.access.log;
    error_log /var/log/nginx/domainxyz.error.log;

    root /var/www/domain.xyz;
    index index.html index.htm index.php;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    rewrite /wp-admin$ $scheme://$host$uri/ permanent;

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

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

    location ~ /\. {
            deny all;
    }

    location ~* /(?:uploads|files)/.*\.php$ {
            deny all;
    }

    location /wp-admin {
            auth_basic "Acceso restringido";
            auth_basic_user_file /var/www/pass.htpasswd;
    }

    location /wp-config.php {
            deny all;
    }

    location /wp-login.php {
            auth_basic "Acceso restringido";
            auth_basic_user_file /var/www/pass.htpasswd;
    }

    location ~ /.well-known {
            allow all;
    }

    location ~ [^/]\.php(/|$) {
            fastcgi_index index.php;
            include fcgi.conf;
            fastcgi_pass unix:/var/run/ajenti-v-php7.0-fcgi-domainxyz-php7.0-fcgi-0.sock;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

nginx 1.11.1
php-fpm 7.0.8
Debian 8

0
задан 3 July 2016 в 21:45
1 ответ

У вас странная конфигурация. На практике http2 может работать только через https. Вы должны определить сервер, который перенаправляет на https, а не один сервер, который обслуживает оба. Вы должны определить свои серверы по одному для каждого файла

Вы должны прочитать мое учебное пособие по Nginx , но вот ключевые части.

Добавьте это в свой nginx.conf. Я изменил то, что большинство людей использует, сайты с поддержкой сайтов, на сайты с поддержкой, так как это проще для заполнения табуляции.

include /etc/nginx/enabled-sites/*;

Главный сервер в /etc/nginx/enabled-sites/example.com.conf

server {
  server_name www.example.com;
  listen 443 ssl http2;

  ssl_certificate /var/lib/acme/live/fullchain;
  ssl_certificate_key /var/lib/acme/live/privkey;

  # Set up preferred protocols and ciphers. TLS1.2 is required for HTTP/2
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;

  # This is a cache for SSL connections
  ssl_session_cache shared:SSL:2m;
  ssl_session_timeout 60m;

  root /var/www/pts;

  // etc
}

Затем сервер пересылки

# Redirect all variations to https://www domain
server {
  listen 80;
  server_name example.com www.example.com;
  return 301 https://www.example.com$request_uri;
}

Я также определяю отдельный сервер по умолчанию. Возможно, вам следует использовать более точный код возврата

server {
  listen      80 default_server;
  server_name _;
  access_log off; log_not_found off;

  return 418; # "I'm a teapot", effectively "go away" https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#4xx_Client_Error

}

1
ответ дан 4 December 2019 в 16:34

Теги

Похожие вопросы