Nginx配置SSL安全证书并解决HTTPS的400 Bad Request问题

前一篇文章《Nginx配置SSL安全证书及解决PEM_read_bio:bad end line error错误》简单介绍了Nginx下SSL安全证书的配置,本来以为这样就算配置完成了,实际不然,首先发现WordPress的AdminSSL无法正常工作,显示有太多的递归转向,也就是说无限循环的跳转,就是无法转到https上,具体错误如下:

Error 310 (net::ERR_TOO_MANY_REDIRECTS): There were too many redirects.

在FireFox火狐下有可能错误是这样的:

Redirection limit for this URL exceeded. Unable to load the requested page. This may be caused by cookies that are blocked.

原先以为是插件问题,想用PHPMyAdmin操作数据库移除插件,利用https的安全方式尝试登录数据库时出现以下错误:

400 Bad Request
The plain HTTP request was sent to HTTPS port

同时地址也变成了类似于http://localhost:443/index.php,也就是表单没有提交到SSL的https上,而是以普通方式提交到443端口,大家都知道443端口是SSL的传输端口,正确的传输方式应该是https协议。

搜索网络得到这篇文章《Nginx下解决 https跳转出现400 Bad Request》。原文作者参考了此文《Nginx and $_SERVER['HTTPS']》,下面我再简单的说明一下解决办法:

1. 查看/usr/local/nginx/conf/nginx.conf 配置,注意include字样,我这里是fastcgi_params文件,也可能是fcgi.conf文件。找到这个文件,用vi打开:

vi /usr/local/nginx/conf/fcgi.conf
# 或者是下面这句,取决于你的配置文件位置
vi /etc/nginx/fastcgi_params

然后在文件的结尾添加下面这句:

fastcgi_param  HTTPS $fastcgi_https; 

2. 修改网站对应的配置文件,可以是conf文件或者是sites-enabled文件夹中的默认配置文件,我这里主要是sites-enabled文件夹中的默认配置文件default,利用vi修改。

vi /etc/nginx/sites-enabled/default

在文件的顶部(注意不要放到server{}里面)加上下面这段代码:

map $scheme $fastcgi_https {
  default off;
  https on;
}

3. 运行/usr/local/nginx/sbin/nginx -t检查一下配置文件有没有语法错误。

4. 利用命令/etc/init.d/nginx restart重启Nginx。

至此,PHPMyAdmin和WordPress后台AdminSSL插件均成功运行,并切换到https上,问题完美解决:-)

点赞