Nginx基础

本文介绍Nginx的基础知识,包括其特点、功能、性能和架构等,并详细讲解了HTTPS反向代理配置方法及Nginx的源码安装过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Nginx基础

Nginx简介

Nginx特点:

  • 模块化设计:良好的扩展性,可以通过模块方式进行功能扩展
  • 高可靠行:主控进程和worker是同步实现的,一个worker出现问题,会立刻启用另一个worker
  • 内存消耗低:一万个长连接(keep-alive),仅消耗2.5mb内存
  • 并发能力强:官方数据每秒支持5万并发
  • 支持热部署:在不停用服务器的情况下实现更新配置文件,更换日志文件,更新服务程序版本。
  • 功能丰富:优秀的反向代理功能和灵活的负载均衡策略

Nginx功能:

  • 支持静态资源的web服务器
  • http/smtp/pop3协议的反向代理服务器、缓存、负载均衡;
  • 支持FASTCGI(fpm)
  • 支持模块化、过滤器(让文本可以实现压缩,节约带宽),ssl及图像大小调整
  • 内置的健康检查功能
  • 基于名称和ip的虚拟主机
  • 定制访问日志

Nginx性能:

Nginx的高并发,官方测试支持5万。实际生产环境能达到2-3万并发。

Nginx架构:

image-20220921184134659

​ Nginx采用一主多从的主从架构

这里的master是使用root身份启动的,因为nginx要工作在80端口。而只有管理员才有权限启动小于低于1023的端口。master主要负责的作用只是启动worker,加载配置文件,负责系统的平滑升级。其它的工作都是worker完成。

模块之间是以流水线的方式实现功能的。流水线,指的是一个用户请求,由多个模块组合各自的功能依次实现完成。各个模块只负责自己的工作,所有模块的工作都做完了,一个流程就结束了。

所谓的平滑升级:在nginx中master只负责支配,而工作大部分都是worker来完成的,开头说到,一个worker没了,下一个worker接上。而要升级这件事通知给了master后master会等待没有更新的worker工作结束后让已经升级完成的worker去工作。这样就可以实现平滑升级。

顺带解释一下反向代理:反向代理方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外表现为一个反向代理服务器。说白了,就是中介。

常用到的命令如下:

nginx -s stop 快速关闭Nginx,可能不保存相关信息,并迅速终止web服务。 
nginx -s quit 平稳关闭Nginx,保存相关信息,有安排的结束web服务。 nginx -s reload 因改变了Nginx相关配置,需要重新加载配置而重载。 
nginx -s reopen 重新打开日志文件。 
nginx -c filename 为 Nginx 指定一个配置文件,来代替缺省的。 nginx -t 不运行,仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试 打开配置文件中所引用到的文件。 
nginx -v 显示 nginx 的版本。
nginx -V 显示 nginx 的版本,编译器版本和配置参数

Https反向代理

​ 除了虚拟环境以外,所有的服务站点都需要使用HTTPS,而HTTPS是什么就不解释了,可以理解为HTTP的安全版本

  • https使用443端口,http使用80
  • ssl 标准需要引入安全证书,所以在nginx.conf中需要指定钥匙位置
  • 证书需要申请

其他和 http 反向代理基本一样,只是在 Server 部分配置有些不同。

#HTTP服务器
server {
#监听443端口。443为知名端口号,主要用于HTTPS协议
		listen	443 ssl;
#定义使用www .xx.com访问
		server_name	www . helloworld . com;
#ssl证书文件位置(常见证书文件格式为:crt/pem)
		ssl_certificate	cert .pem;
#ssl证书key位置
		ssl_certificate_keycert. key;
#ssl配置参数(选择性配置)
		ssl_session_cacheshared : SSL : 						1m;ssl_session_timeout5m;
#数字签名,此处使用MD5
		ssl_ciphers HIGH:!aNULL:!MD5;
		ssl_prefer_server_ciphers on;

		location / {
				root/root;
				indexindex.html index.htm;
}
}

nginx源码安装

#创建系统用户nginx
[root@slave src]# useradd -r -M -s  /sbin/nologin nginx
#安装依赖环境
[root@slave src]# yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++
[root@slave src]# yum -y groups mark install 'Development Tools'
#创建日志存放目录
[root@slave src]# mkdir -p /var/log/nginx
[root@slave src]# chown -R nginx.nginx /var/log/nginx


#下载nginx
[root@slave yum.repos.d]# cd /usr/src/
[root@slave src]# ls
debug  kernels
[root@slave src]# wget https://nginx.org/download/nginx-1.20.2.tar.gz
[root@slave src]# ls
debug  kernels  nginx-1.20.2.tar.gz

#编译安装
[root@slave src]# tar xf nginx-1.20.2.tar.gz 
[root@slave src]# ls
debug  kernels  nginx-1.20.2  nginx-1.20.2.tar.gz
[root@slave src]# cd nginx-1.20.2/
[root@slave nginx-1.20.2]# ./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-debug \
> --with-http_ssl_module \
> --with-http_realip_module \
> --with-http_image_filter_module \
> --with-http_gunzip_module \
> --with-http_gzip_static_module \
> --with-http_stub_status_module \
> --http-log-path=/var/log/nginx/access.log \
> --error-log-path=/var/log/nginx/error.log


#nginx配置,服务控制方式,使用nginx命令
[root@slave nginx-1.20.2]# make -j $(grep 'processor' /proc/cpuinfo | wc -l) && make install


#配置环境变量
[root@slave ~]# echo 'export PATH=/usr/local/nginx/sbin:$PATH' > /etc/profile.d/nginx.sh
[root@slave ~]# source /etc/profile.d/nginx.sh 
[root@slave ~]# which nginx 
/usr/local/nginx/sbin/nginx



#使用 nginx -t 检查配置文件语法
[root@slave ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful


#用nginx -v 输出nginx的版本
[root@slave ~]# nginx -v
nginx version: nginx/1.20.2




做一下开机自启,修改配置文件
[root@slave ~]# cp /usr/lib/systemd/system/sshd.service /usr/lib/systemd/system/nginx.service
[root@slave ~]# vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx  server daemon
After=network.target 

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

[root@slave ~]# systemctl daemon-reload 
[root@slave ~]# nginx -s stop
[root@slave ~]# systemctl status nginx.service 
● nginx.service - nginx  server daemon
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disa>
   Active: inactive (dead)
[root@slave ~]# systemctl start nginx.service 
[root@slave ~]# systemctl status nginx.service 
● nginx.service - nginx  server daemon
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disa>
   Active: active (running) since Mon 2022-10-10 20:32:58 CST; 3s ago
  Process: 80407 ExecStart=/usr/local/nginx/sbin/nginx (code=exited, status=0/SUCCESS)
 Main PID: 80408 (nginx)
    Tasks: 2 (limit: 23460)

[root@slave ~]# systemctl enable nginx.service 
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.

[root@slave ~]# ss -anlt
State     Recv-Q    Send-Q       Local Address:Port       Peer Address:Port   Process   
LISTEN    0         128                0.0.0.0:22              0.0.0.0:*                
LISTEN    0         128                0.0.0.0:80              0.0.0.0:*                
LISTEN    0         128                   [::]:22                 [::]:*              

img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值