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架构:
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 [::]:*