Rails nginx error_page 相关问题

kehao · April 13, 2012 · Last by doitian replied at April 15, 2012 · 6719 hits
 server {
    listen 443 default ssl;
#client_max_body_size 20M;
    server_name localhost;
    keepalive_timeout 60;

    root /home/test/w/test/public;

    ssl  on;  
    ssl_certificate  /etc/ssl/private/server.crt;  
    ssl_certificate_key  /etc/ssl/private/server.key;  
    ssl_client_certificate   /etc/ssl/private/ca.crt;  
    ssl_session_timeout  5m;  
    ssl_verify_client on;  
    ssl_protocols  SSLv2 SSLv3 TLSv1;  
   # ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;  
    ssl_prefer_server_ciphers   on;

    location / {
      proxy_redirect off;
      proxy_set_header Host $http_host;
      proxy_set_header X-Real-IP       $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Ssl on;
      proxy_set_header X-Forwarded-Proto https;

      client_max_body_size       10m;
      client_body_buffer_size    128k;

      proxy_connect_timeout      90;
      proxy_send_timeout         90;
      proxy_read_timeout         90;

      proxy_buffer_size          4k;
      proxy_buffers              4 32k;
      proxy_busy_buffers_size    64k;
      proxy_temp_file_write_size 64k;

      # If you don't find the filename in the static files
      # Then request it from the unicorn server
      if (!-f $request_filename) {
        proxy_pass http://unicorn_server;
        break;
      }
    }

    error_page 500 502 503 504 /500.html;
#   error_page 400  /400.html; 
#    location = /400.html {
#      internal;
#    }

当浏览器不提供证书时,会报 400,如下图

我可能想要如下图:

但是 error_page 不起作用:

error_page 400  "http://baidu.com";

error_page 400  /400.html;
    location = /400.html {
    internal;
}

可能执行到 ssl_verify_client on; 就直接抛了 400,请问这个状态码怎么抓?

可以试下

error_page 400 =404 /404.html; 



#2 楼 @kehao 估计是 /404.html 这个页面本身又出错了,你试试把在 location /404.html 把 ssl_verify_client 关了

#3 楼 @doitian ssl_verify_client 关了没问题

#4 楼 @kehao 我是说只在 400.html 里关掉

location = /400.html { ssl_verify_client off; internal; }

You need to Sign in before reply, if you don't have an account, please Sign up first.