通过在群里大家的讨论,我总结了两点问题,很多初学者都问过:
1. ngixn事件处理中关于active和ready的问题
2. ngx_connection_t与ngx_http_connection_t结构的区别与联系
这里分开讨论下。
1.ngixn事件处理中关于active和ready的问题
这俩成员何时为0,何时又被置1,把很多人搞迷糊了。其实从nginx的设计上来讲,它想表达的语义很明确:
当一个fd第一次加入到epoll中的时候,active会被置1,意味着这个fd是有效的。直到我们把这个fd从epoll中移除,active才会清零。ready是另一层处理,这个fd虽然在epoll中,但是有时这个fd可以读写,有时则是未就绪的。那么当可读写时,ready就会被置1。这样我们就可以来读写数据了。当我们从fd读写到EAGAIN时,ready就会被清零,意味着当前这个fd未就绪。但是它不影响active,因为这个fd仍然在epoll中,ready==0只是要等待后续的读写触发。所以nginx在这两个变量的使用上是很明确的。
2.
ngx_connection_t与ngx_http_connection_t结构的区别与联系
群里的朋友问过好几次了,这里稍微总结一下:
在nginx的定义里面ngx_connection_t可以看做是四层tcp的抽象,当然除了一些必要的连接信息之外,还有很多其他强大的功能,如有些事件控制相关的变量。对于具体的七层服务,如http,mail等,一般都有各自的具体信息。而这些信息通过ngx_connection_t中的data成员来承载,注意到类型为void *了吧。具体来讲,tcp上承载的http相关信息,使用的是ngx_http_connection_t结构,而mail则使用ngx_mail_session_t。
顺便提一下,下面这个问题也有很多新人问过:
“在ngx_http_init_requst中,这里的c->data 是从ngx_get_connection 拿出来的,原来指向的是下一个free connection 。我跟了下代码,也没发现有什么地方改过c->data”。
其实在ngx_get_connection函数中,有个操作是ngx_memzero(c, sizeof(ngx_connection_t)),所以初始的c->data是NULL。
分享到:
相关推荐
1. **端口冲突**:如果尝试启动第二个Nginx时遇到端口已被占用的问题,请确保第一个Nginx已经配置了正确的监听端口,并且两个Nginx实例监听的端口不相同。 2. **权限问题**:如果在启动Nginx时遇到权限问题,请...
为了节约成本,很多时候一台server 的nginx可能要部署多个前端的情况,本实例是在docker环境下部署两个前端,同时处理前端调用后端跨域问题,本示例为阿里云centos7 系统docker20.10.6环境下nginx1.19.5版本 ...
以下是两个项目的实践示例: 项目一: * 前端:html 在 a 服务器,端口为 80,ip 为 139.9.77.44 * 后端:logic 在 b 服务器,端口分别为 80(A 项目),9109(B 项目),ip 为 139.9.80.205 * 负载均衡 Nginx:在...
对于Nginx,一个IP上配置多个站点还是很常见的。尤其是在开发环境上,更是如此。 下面在我的阿里云上简单的实现这样一个需求: 在一个IP上通过对端口区分来配置多个站点。 环境初始化目录一览配置站点准备添加配置...
Nginx作为一个高性能的反向代理服务器,常被用于处理此类问题。本篇将详细介绍如何在Linux环境下安装Nginx,并通过修改配置文件来解决跨域限制。 ### Nginx安装步骤 1. **更新系统包** 在安装Nginx之前,确保系统...
在这个压缩包中,我们有两个不同操作系统的版本:Nginx 1.22.1 for Windows 和 Nginx 1.22.1 for Linux。 首先,让我们来详细了解一下Nginx 1.22.1这个版本。在Nginx的版本管理中,版本号通常由三个数字组成,如...
首先,我们的目标是在同一个域名下部署两个Vue项目,分别对应于`/login`和`/student/login`两个路径。这两个项目应并列存储在同一个文件夹内。 **Vue项目配置** 对于二级域名的Vue项目(例如`/student/login`),...
`^~`前缀确保了这两个location在匹配成功后不会继续尝试正则表达式匹配。`alias`指令用于指定项目实际的文件位置。对于PHP项目,Nginx会将PHP请求转发给监听在127.0.0.1:9000的FastCGI服务器处理。`error_page`指令...
我们因业务需求需要在一个公众号域名下面,发布两个需要微信授权的项目,怎么办? 我们可以用nginx服务器做反向代理来解决这个问题。nginx服务器对外80端口,然后根据URL参数不同,对内访问不同的项目。 ...
针对这两个需求,本文将详细介绍如何在Nginx中实现。 首先,关于同一端口监听多个域名。这是一个非常实用的功能,尤其是在公网IP资源稀缺的当下。通过使用Nginx的虚拟主机功能,可以在同一个IP地址和端口上,通过...
本示例中的"nginx-配置多个tomcat"就是这样一个应用场景,它涉及到Nginx和Tomcat两个核心组件,以及如何通过Nginx作为反向代理来管理多个Tomcat实例。 **Nginx** 是一款高性能的HTTP和反向代理服务器,以其轻量级、...
Nginx部署及常见问题,Nginx部署及常见问题Nginx部署及常见问题Nginx部署及常见问题Nginx部署及常见问题Nginx部署及常见问题Nginx部署及常见问题Nginx部署及常见问题Nginx部署及常见问题Nginx部署及常见问题Nginx...
2. 配置 Nginx 上的砖发的 Nginx 配置问题导致无法实现跨域请求,是因为他的 Nginx 打在 Windows 系统上,Windows 和 Linux 在配置上有一点区别,在 Windows 上需要去掉 rewrite 的配置,去掉这个后来就好了。...
Nginx配置多个service 多个访问路径 找到conf/nginx.conf修改配置文件 #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid ...
经了解,他对同一个项目使用tomcat部署了两个环境,一个在开发服务器上,一个在他本机,两个环境代码配置完全相同。两边通过同一个nginx进行反向代理,nginx配置大致如下, location /health/ { proxy_pass ...
Nginx 1.18 是 Nginx Web 服务器的一个特定版本,它在 Linux 操作系统上运行。Nginx 是一个流行的开源 Web 服务器,以其高性能、高并发处理能力而闻名,常用于静态内容服务和反向代理。在这个版本中,Nginx 提供了...
这个配置将请求分配到两个 Tomcat 服务器上,每个服务器的权重为 5。 location / { root html; index index.html index.htm; proxy_pass http://localhost; proxy_redirect off; proxy_set_header Host $host;...
采用nginx作反向代理,出现了一个诡异的问题,小文件可以提交,大文件会报500内部错误。这个是什么原因导致的呢? 查wiki可知,上传文件大小相关的有三个配置 client_body_buffer_size 配置请求体缓存区大小, ...
例如,如果你有两个项目实例运行在不同的端口,可以这样配置: ```conf upstream project1_servers { server localhost:8080; server localhost:8081; } location /project1 { proxy_pass ...
在微信小程序中,通常将nginx作为服务器后端,负责接收客户端请求,并将请求转发给相应的服务端应用。 3. https服务配置:配置https服务涉及到nginx监听443端口、加载SSL证书和私钥文件。SSL证书和私钥文件通常保存...