无法获得SSL站点以正确加载JS + CSS。投掷409(冲突)

时间:2014-09-27 21:30:53

标签: php codeigniter ssl nginx

我正在使用nginxcodeigniter一起为我的网站提供服务。 如果没有代理,我可以正确加载ssl网站。

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

能够在代理服务器后面正确加载非ssl站点。

这是nginx conf中的ssl代码块:

Pastie Nginx Conf

当我直接打开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) 

提供静态资产不起作用..

2 个答案:

答案 0 :(得分:1)

nginx文档和w3文档都可能让您更好地理解该问题。似乎在跨代理传递请求时问题可能与冲突相关联。这意味着代理正在更改请求参数。不查看和比较两个请求的日志很难分辨出差异在哪里。

看一下这些链接:

http://nginx.com/resources/admin-guide/nginx-ssl-termination/

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

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

答案 1 :(得分:1)

缓存似乎不是问题,因为它看起来并不像你设置缓存一样。要设置缓存,您需要以下内容:         location~ *。(ico | css | js | gif | jpe?g | png)(\?[0-9] +)?$ {                 到期最大值;                 log_not_found off;         }

如果您查看nginx wiki上的sample CI config,那么您会发现它有很大不同。

CI中的$config['base_url']设置也可能存在问题。再次,在同一个nginx wiki页面上有更多信息。


更新回复:

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

        access_log /var/log/nginx/mywebserver.com_access.log;
        error_log /var/log/nginx/mywebserver.com_error.log;

或者将路径更改为您喜欢的任何路径。

但是,看起来我们可能会处理409sec_error_inadequate_cert_type之间的两个不同错误。

409错误

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

409错误可能来自许多不同的地方,但这里有一个关于它意味着什么的快速陈述:

  

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

奇怪的是,这通常发生在PUT请求中(这里将其视为EDIT CONFLICT)。因此,一个问题可能是请求使CI重写这些文件,从而导致409.您也可以使用Web Dav经常发现此错误,这是有道理的。

它也可以链接到保持活动部分,因为它可能因此而产生不同的资产,因此在写入新资产时要求使用旧版本的资产。你也许可以修复 通过将keepalive_timeout 75 75;添加到服务器块。它也可能与Connection / Proxy-Connection标头有关。以下ConnectionProxy-Connection标题为some more reading

代理可能在重写常规请求时出现问题。使用起来更好: return 301 $scheme:/$server_name$request_uri;有几个原因与SEO有关, 但可能在代理传递过程中也会失去一些安全信息。

sec_error_inadequate_cert_type

因此,当其他一些浏览器不知道时,FF有丢失此错误的历史(基于错误报告)。它与Chrome做同样的事情吗?

sec_error_inadequate_cert_type代码也可以表示许多不同的内容:

静态资产是否恰好在SSL证书不涵盖的子域上提供?此外,您可能希望在服务器块中指明特定的ssl_protocolsssl_ciphers

这些可能不适用:         ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;         ssl_ciphers HIGH:!aNULL:!MD5;

我已经调查了一些其他的可能性,并且我已将它们包含在下面的示例nginx配置中,该配置有更多可能有用的指令,因此请查看下面的配置是否可行。< / p>

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

    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;
        }
    }