我试图将我的Laravel+vuejs+nuxtjs
项目从http到https但当我进入http://example.com或者http://www.example.com下载的是空文件
到目前为止我做了什么:
1-在 nginx.conf 中注释default_type application/octet-stream
并添加default_type text/html
2-types { } default_type "text/plain";
在location /{}
example.com.conf中定义
3-nginx 重定向,代码如下
server{
listen xx.xx.xx.xx:80;
server_name example.com www.example.com;
return 301 https://www.example.com$request_uri;
}
4- 尝试使用以下 example.com.conf 文件通过 .php 文件对其进行重定向:
server {
listen 37.152.191.249:80;
server_name www.example.com example.com;
access_log /usr/local/apache/domlogs/example.com.bytes bytes;
access_log /usr/local/apache/domlogs/example.com.log combined;
error_log /usr/local/apache/domlogs/example.com.error.log error;
root /home/example/public_html/;
index index.php;
location / {
types { } default_type "text/plain";
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors off;
fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
}
location ~* "/\.(htaccess|htpasswd)$" {deny all;return 404;}
disable_symlinks if_not_owner from=/home/example/public_html;
}
public_html 中的index.php代码:
$location = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
header('HTTP/1.1 301 Moved Permanently');
header('Location: ' . $location);
exit;
以上方法均无效,问题仍然存在。
+当前配置:
nginx-t报告:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
例如.com.ssl.conf:
server{
listen xx.xx.xx.xx:443 http2 ssl;
server_name example.com;
ssl_certificate /etc/pki/tls/certs/example.com.bundle;
ssl_certificate_key /etc/pki/tls/private/example.com.key;
ssl_protocols TLSv1.2;
ssl_ciphers EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EE3CDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA!RC4:EECDH:!RC4:!aNULL:!eN$
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 60m;
return 301 https://www.example.com$request_uri;
}
server {
listen xx.xx.xx.xx:443 http2 ssl;
server_name www.example.com;
access_log /usr/local/apache/domlogs/example.com.bytes bytes;
access_log /usr/local/apache/domlogs/example.com.log combined;
error_log /usr/local/apache/domlogs/example.com.error.log error;
ssl_certificate /etc/pki/tls/certs/example.com.bundle;
ssl_certificate_key /etc/pki/tls/private/example.com.key;
ssl_protocols TLSv1.2;
ssl_ciphers EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA!RC4:EECDH:!RC4:!aNULL:!eN$
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 60m;
root /home/example/core/public/;
index index.php;
location / {
proxy_set_header Connection 'upgrade';
proxy_http_version 1.1;
proxy_pass https://xx.xx.xx.xx:3000$uri;
proxy_intercept_errors on;# In order to use error_page directive this needs to be on
error_page 404 = @php;
}
location @php {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors off;
fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
}
location ~* "/\.(htaccess|htpasswd)$" {deny all;return 404;}
disable_symlinks if_not_owner from=/home/example/public_html;
location /.well-known/acme-challenge {
default_type "text/plain";
alias /usr/local/apache/autossl_tmp/.well-known/acme-challenge;
}
location /.well-known/pki-validation {
default_type "text/plain";
alias /usr/local/apache/autossl_tmp/.well-known/acme-challenge;
}
}
当前 example.com.conf:
server{
listen xx.xx.xx.xx:80;
server_name example.com www.example.com;
return 301 https://www.example.com$request_uri;
}
我没有添加 nginx -T 报告,因为它显示了来自其他网站的不相关的配置文件。
此外,运行多个站点和 wordpress 站点的服务器使用提供的代码进行重定向也没有问题#3重定向,但当涉及到这使用 nuxtjs 的网站,我下载的是一个空文件。
任何帮助都将不胜感激
答案1
我复制了我的一个 wordpress nginx 配置并替换了xxx部分域名和年和服务器 IP
server {
listen yyy.yyy.yyy.yyy:80;
server_name xxx.com www.xxx.com;
return 301 https://xxx$request_uri;
location / {
try_files $uri $uri/ /index.php?$args;
add_header Strict-Transport-Security "max-age=31536000";
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
location ~.*\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ {
expires max;
}
location ~ [^/]\.php(/|$) {
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
}
}
location ~* "/\.(htaccess|htpasswd)$" {deny all;return 404;}
disable_symlinks if_not_owner from=/home/domainname/public_html;
location /.well-known/acme-challenge {
default_type "text/plain";
alias /usr/local/apache/autossl_tmp/.well-known/acme-challenge;
}
location /.well-known/pki-validation {
default_type "text/plain";
alias /usr/local/apache/autossl_tmp/.well-known/acme-challenge;
}
}
它被重定向到 https 而不下载任何内容,我已将对 nginx 和 php-fpm 所做的所有更改恢复为默认设置。
现在它可以工作了但是为什么呢?
玩了一会后,发现将工作 nginx 配置的位置更改为location ~ \.php$
(我之前使用的那个)会导致问题再次出现。就是这样!
location ~ \.php$
没有进一步调查为什么不是但location ~ [^/]\.php(/|$)
确实有效。
希望能帮助到你。
答案2
温斯顿克劳斯@serverfault于 2017 年 4 月对同一主题做出了贡献。
位置 ~ 修饰符
[^/]\.php(/|$)
可能指向不包含
listen 80 http2
指令,但
\.php$
确实可能会影响 nginx 如何监听端口 80。