MENU

Centos7安装OpenSSL小记

前言

最近给博客网站nginx编译支持TLS1.3协议,TLS1.3在加密上有所提升,还有一点是握手过程中,第一次握手只需要一个RTT而第二次访问则是0-RTT,因此特意去升级尝鲜。由于TLS1.3还需要OpenSSL1.1.1以上的版本,而系统自带OpenSSL是1.1.0版本。

阅读全文

Logrotate日志切割

前言

最近将docker上的nginx服务完善添加日志的切割,之前一直是一个文件时间久了出现体积过大,而且不利于查看访问情况(比如每个小时情况、每天的情况等)

阅读全文

FastCGI协议

前言

最近采用C++开发一个webserver,功能类似于nginx。支持其中的多站点host、反向代理、负载均衡、支持cgi、支持session、cookie。支持FastCGI,类似nginx可以监听9000端口连接php-fpm,因此查资料找相关FastCGI协议相关。

CGI及FastCGI相关知识点

  • CGI(common gateway interface)通常翻译为共同网关接口:是Web Server与后台编程语言交互的一种协议。但是CGI有一个致命的缺点,就是每处理一个请求度需要fork一个进程,不断地fork是一项很消耗时间和资源的工作,这样低效的方式明显不能满足需求。
  • FastCGI是一个常驻型的CGI,可以一直执行,只要激活后,不会每次都花时间去fork一次,而且还支持分布式运算。

学习过PHP的童鞋都知道在PHP有个叫php-fpm,它是FastCGI在PHP中的一种实现。我们常常在nginx中配置fastpass 127.0.0.1:9000,其实nginx将动态语言交由PHP处理。

阅读全文

GCC4.8使用regex坑

背景

最近在写C++的webserver,其中的有一块需要用到正则表达式,而系统centos7自带的GCC编译器的版本gcc 版本 4.8.5,在make编译时候出现std::regex_error::regex_error,一开始怀疑正则问题,使用网页版的正则表达式工具review确实是正确的,后面有在思考是否为编译器版本问题,强大的搜索引擎告诉我确实为版本的原因,regex标准库需要GCC大于等于4.9版本。

阅读全文

socket编程Transport endpoint is not connected错误总结

前言

最近使用C++网络编程,计划实现一个web服务(模拟http请求、支持host模式)。刚接触犯了一个低级的通信错误,导致Transport endpoint is not connected。

原因分析

在server端accept一个新的连接后返回一个文件描述符(这里就叫connect_fd),但这个文件描述符有区别于初始化socket的listen_fd文件描述符。在read函数的时候错误将listen_fd传入到函数中,最终导致Transport endpoint is not connected错误。

# read读取数据过程
while(true){
    if((nread = read(connect_fd, ptr, nleft)) < 0){
    
    }
}

# accept函数 使用的是
int accept(int listen_fd, struct sockaddr *cliaddr, socklen_t *addrlen);