nginx配置http和https共存

给nginx配置SSL证书之后,https可以正常访问,http访问显示400错误,nginx的配置如下:server { listen 80 defa

给nginx配置SSL证书之后,https可以正常访问,http访问显示400错误,nginx的配置如下:

 
  1. server {

  2. listen 80 default backlog=2048;

  3. listen 443;

  4. server_name linuxyan.com;

  5. root /var/www/html;

  6.  
  7. ssl on;

  8. ssl_certificate /usr/local/Tengine/sslcrt/linuxyan.com.crt;

  9. ssl_certificate_key /usr/local/Tengine/sslcrt/linuxyan.com.key;

  10. }

    扫描二维码关注公众号,回复: 2704049 查看本文章

http访问的时候,报错如下:

 
  1. 400 Bad Request

  2. The plain HTTP requset was sent to HTTPS port. Sorry for the inconvenience.

  3. Please report this message and include the following information to us.

  4. Thank you very much!

说是http的请求被发送到https的端口上去了,所以才会出现这样的问题。

 
  1. server {

  2. listen 80 default backlog=2048;

  3. listen 443 ssl;

  4. server_name linuxyan.com;

  5. root /var/www/html;

  6.  
  7. ssl_certificate /usr/local/Tengine/sslcrt/linuxyan.com.crt;

  8. ssl_certificate_key /usr/local/Tengine/sslcrt/linuxyan.com.key;

  9. }

把ssl on;这行去掉,ssl写在443端口后面。这样http和https的链接都可以用,完美解决。

原文标题:Nginx环境下http和https(ssl)共存的方法

原文地址:http://www.abcde.cn/info/show-26-1511-1.html

listen函数把一个由socket函数创建的套接字转换成一个被动套接字,指示内核接受指向该套接字的连接请求。该套接字也由CLOSED状态转换到LISTEN状态。

函数原型:

#include <sys/socket.h>

int  listen(int sockfd,  int backlog);           

成功返回0,失败返回-1。

listen之后内核为给定的监听套接字维护两个队列:未完成连接队列,已完成连接队列。

未完成连接队列:已接受客户端的SYN分节,而且已经发送了第二个SYN分节和第一个SYN分节的ACK。

已完成连接队列:在未连接基础上接受到了客户端的ACK响应,TCP3路握手完成(此时accept并没有参与),

等待accept从该队列头返回。

backlog参数就是指已完成连接队列的个数,已完成连接队列的实际数目往往比backlog稍大;比如Linux是比backlog大3。如果不想让客户端连接到你的服务器上,千万不要把backlog指定为0,一定要把这个套接字关闭。

既然已完成连接队列的数目是有backlog指定的,那么未完成队列的数目又是多少?Berkeley给出了一个模糊因子,backlog乘以1.5得到两个队列数目之和。假如backlog=10,那么未完成连接队列数目就是5。

当队列已满时,一个客户SYN到达时,服务器的TCP就忽略该分节(一般不向客户端发送RST),让对端的TCP重传机制来处理。

如果有黑客编写了一个以高速率给受害主机发送SYN的程序,就会导致正常的客户SYN排不上队,这就是SYN  flooding攻击。主流的解决方法是从防火墙那里入手,确保到达服务器的TCP连接都是正常。

猜你喜欢

转载自blog.csdn.net/h330531987/article/details/81288877