Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Can';t让SSL站点加载JS+;正确地使用CSS。投掷409(冲突)_Php_Codeigniter_Ssl_Nginx - Fatal编程技术网

Php Can';t让SSL站点加载JS+;正确地使用CSS。投掷409(冲突)

Php Can';t让SSL站点加载JS+;正确地使用CSS。投掷409(冲突),php,codeigniter,ssl,nginx,Php,Codeigniter,Ssl,Nginx,我正在使用nginx和codeigniter为我的站点提供服务。 当没有代理时,我能够正确加载ssl站点 但是,当代理后面的计算机试图访问它时,会发生409冲突 它能够在代理后面正确加载非ssl站点 以下是nginx conf中的ssl代码块: 奇怪的是,当我直接打开css或js文件(例如,在浏览器中键入css url)时,它会正确加载它。 以下是返回409冲突的资产的响应+请求头 请求标头: Accept:text/css,*/*;q=0.1 Accept-Encoding:gzip,def

我正在使用
nginx
codeigniter
为我的站点提供服务。 当没有代理时,我能够正确加载ssl站点

但是,当代理后面的计算机试图访问它时,会发生
409
冲突

它能够在代理后面正确加载非ssl站点

以下是nginx conf中的ssl代码块:

奇怪的是,当我直接打开css或js文件(例如,在浏览器中键入css url)时,它会正确加载它。 以下是返回
409
冲突的资产的响应+请求头

请求标头:

Accept:text/css,*/*;q=0.1
Accept-Encoding:gzip,deflate
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Cookie:ci_session=ca41f4c9930b678f07acb9a45c839b63
Host:www.mywebsite.com
If-Modified-Since:Wed, 24 Sep 2014 01:13:00 GMT
If-None-Match:"54221a9c-1da51"
Referer:https://www.mywebsite.com/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)         Chrome/37.0.2062.120 Safari/537.36
响应标题:

Cache-Control:no-cache
Connection:close
Content-Length:1256
Content-Type:text/html; charset=utf-8
Pragma:no-cache
Proxy-Connection:close

在FF中浏览时,会抛出以下内容:

An error occurred during a connection to www.mywebsite.com. Certificate type not approved for application. (Error code: sec_error_inadequate_cert_type) 

提供静态资产不起作用。

nginx文档和w3文档都可能让您更好地理解这个问题。似乎问题可能与通过代理传递请求时的冲突有关。这意味着代理正在更改请求参数。如果不查看和比较两个请求的日志,就很难判断差异在哪里

请查看以下链接:


还要确保您的CSS和JS请求在缓存方面可能有所不同,因此,代理可能会保持请求的原样。

缓存似乎不是问题,因为看起来您根本没有设置缓存。要设置缓存,您需要以下内容: 位置*(\?[0-9]+)?${ 最大值; 未发现注销日志; }

如果您查看nginxwiki上的,那么您会发现它有很大的不同

您在CI中的
$config['base\u url']
设置也可能有问题。同样,在同一个nginx wiki页面上提供更多信息


最新答复:

首先,如果将日志放入块中,您可能会获得更多信息:

        access_log /var/log/nginx/mywebserver.com_access.log;
        error_log /var/log/nginx/mywebserver.com_error.log;
或者改变你想要的路径

但是,看起来我们可能正在处理
409
sec\u error\u included\u cert\u type
之间的两个不同错误

409错误 那么,让我们先看看409错误的可能原因:

409错误可能来自许多不同的地方,但这里有一个关于其含义的简短说明:

由于与资源的当前状态冲突,无法完成请求。只有在预期用户可能能够解决冲突并重新提交请求的情况下,才允许使用此代码

奇怪的是,这种情况经常发生在PUT请求中(这里将其视为编辑冲突)。因此,一个问题可能是请求使CI重写这些文件,从而导致409。您还可以在Web Dav中经常发现此错误,这是有道理的

它还可以链接到保持活动部分,因为它可能因此以不同的方式生成资产,因此在编写新的资产时要求使用旧版本的资产。你也许能修好 增加
keepalive\u超时75到服务器块。它还可能与连接/代理连接头相关。下面是
连接
代理连接
标题

在重写常规请求时,代理可能存在问题。最好使用:
返回301$scheme:/$server\u name$request\u uri出于几个原因,其中一些与搜索引擎优化有关,
但它也可能在代理传递过程中丢失一些安全信息

sec_错误_证书类型不充分_ 因此,FF有一个历史记录,当其他浏览器没有抛出此错误时(基于错误报告)。它和Chrome做同样的事情吗

sec_错误_证书类型代码也可能表示许多不同的情况:

静态资产是否恰好服务于SSL证书未涵盖的子域?此外,您可能希望在服务器块中指示特定的
ssl\u协议
ssl\u密码

这些可能不适用: ssl_协议SSLv3 TLSv1 TLSv1.1 TLSv1.2; ssl_密码高:!阿努尔:!MD5

我还研究了其他一些可能性,并将它们包含在下面的示例nginx配置中,其中包含了一些可能会有所帮助的指令,因此请查看下面的配置是否可行

如果在实现错误日志后,您在错误日志中发现了一些内容,或者来自其他浏览器的信息不同,请更新我

    server{
        listen 80;
        server_name www.mywebserver.com;
        return 301 $scheme:/$server_name$request_uri;
    }

    server {
        listen                          443 ssl;
        ssl on;

        ssl_certificate                 /etc/nginx/ssl/www.mysite.com.SSL.crt;
        ssl_certificate_key             /etc/nginx/ssl/www.mysite.com.key;

        server_name                     www.mysite.com;
        index                           index.php;
        root                            /home/user/workspace/;

        ## Access and error logs.
        access_log /var/log/nginx/mywebserver.com_access.log;
        error_log /var/log/nginx/mywebserver.com_error.log;

        ## Keep alive timeout set to a greater value for SSL/TLS.
        keepalive_timeout               75 75;

        ## Strict Transport Security header for enhanced security. See
        ## http://www.chromium.org/sts.
        add_header                      Strict-Transport-Security "max-age=7200";

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

        location ~ [^/]\.php(/|$) {
            fastcgi_split_path_info     ^(.+?\.php)(/.*)$;
            fastcgi_pass                unix:/var/run/php5-fpm.sock;
            fastcgi_index               index.php;
            fastcgi_param               SCRIPT_FILENAME    /usr/home/user/public_html$fastcgi_script_name;
            include                     fastcgi_params;
        }

        location ~* .(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {
            gzip_static                 on;

            expires                     max;
            add_header                  ETag '';
            add_header                  Last-Modified '';
            add_header                  Cache-Control "max-age=290304000, no-transform, public";
            add_header                  Accept-Ranges '';

            tcp_nodelay                 off;
            log_not_found               off;

            ## Set the OS file cache.
            open_file_cache             max=3000 inactive=120s;
            open_file_cache_valid       45s;
            open_file_cache_min_uses    2;
            open_file_cache_errors      off;
        }
    }

是的,我怀疑这可能与超时/缓存有关。。它将加载一些css文件而不是其他文件,并且在匿名模式下,它将加载其他文件而不是其他文件,因此非常不一致。将让您不断更新,谢谢。更新基本url、索引页面和uri协议无法解决此问题。当然,它会将其重写为使用ssl。不过,只是重申一下,ssl在我的计算机上运行良好,但它不在代理之后。这是一个非常非常奇怪的问题。我已经更新了我的答案,看看还有没有其他办法。然而,更可能的是,代理正在剥离一些必要的头,以使其工作。这可能会改变请求的性质。显式添加标题和更改保持活动状态可能会有所帮助。让我知道。