一、简介:
1、nginx、apache是什么?
- Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。它由伊戈尔·赛索耶夫为Rambler.ru站点开发,以其稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。Nginx的特点包括占有内存少、并发能力强、配置简单,并且支持负载均衡,通常被用作前端服务器或反向代理服务器。它特别适合处理静态文件和网页服务,同时也支持动态页面通过扩展脚本和模块。Nginx的这些特性使其在处理高并发访问时表现出色,适合于需要处理大量并发连接的场景。
- Apache则是一个模型化的服务器,可以运行在几乎所有的服务器上,以其模块多、性能稳定而著称。Apache支持多种模块和扩展,包括对动态页面的支持,如PHP等,这使得它在处理动态请求时比较擅长。Apache采用同步多进程模型,每个连接对应一个进程,这种模型在处理复杂的应用逻辑时表现良好。然而,与Nginx相比,Apache在处理静态文件时的性能可能较低,尤其是在高并发环境下。尽管如此,Apache在模块化和.htaccess文件支持方面更有优势,提供了更多的配置选项和灵活性,适合于需要复杂配置和较多自定义功能的网站。
- 在现代Web架构中,Nginx和Apache经常一起使用,利用它们各自的优势来提供更加强大和灵活的Web服务解决方案。例如,Nginx可以作为前端的反向代理服务器来处理静态文件和缓存内容,而Apache则处理动态请求。这种组合利用了两种服务器的最佳特性,以满足不同类型的应用需求。
2、nginx进程结构
web请求处理机制
- 多进程方式:服务器每接收到一个客户端请求就有服务器的主进程生成一个子进程响应客户端,直 到用户关闭连接,这样的优势是处理速度快,子进程之间相互独立,但是如果访问过大会导致服务 器资源耗尽而无法提供请求
- 多线程方式:与多进程方式类似,但是每收到一个客户端请求会有服务进程派生出一个线程和此客 户端进行交互,一个线程的开销远远小于一个进程,因此多线程方式在很大程度减轻了web服务器 对系统资源的要求,但是多线程也有自己的缺点,即当多个线程位于同一个进程内工作的时候,可 以相互访问同样的内存地址空间,所以他们相互影响,一旦主进程挂掉则所有子线程都不能工作 了,IIS服务器使用了多线程的方式,需要间隔一段时间就重启一次才能稳定。 Nginx是多进程组织模型,而且是一个由Master主进程和Worker工作进程组成。
3、nginx模块介绍
nginx 有多种模块
- 核心模块:是 Nginx 服务器正常运行必不可少的模块,提供错误日志记录 、配置文件解析 、事件 驱动机制 、进程管理等核心功能
- 标准HTTP模块:提供 HTTP 协议解析相关的功能,比如: 端口配置 、 网页编码设置 、 HTTP响应 头设置 等等
- 可选HTTP模块:主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,比如: Flash 多媒体传输 、解析 GeoIP 请求、 网络传输压缩 、 安全协议 SSL 支持等
- 邮件服务模块:主要用于支持 Nginx 的 邮件服务 ,包括对 POP3 协议、 IMAP 协议和 SMTP协议的 支持
- Stream服务模块: 实现反向代理功能,包括TCP协议代理
- 第三方模块:是为了扩展 Nginx 服务器应用,完成开发者自定义功能,比如: Json 支持、 Lua 支 持等
二、nginx配置及其功能
1、环境搭建
1.1、下载安装
配置
去官网下载https://nginx.org/en/download.html
本地上传nginx scp 本地文件 user@ip:路径
dnf install gcc pcre-devel zlib-devel openssl-devel -y安装需要的包
useradd -s /sbin/nologin -M nginx创建nginx用户
tar zxf nginx-1.24.0.tar.gz 解压
cd nginx-1.24.0/
./configure --prefix=/usr/local/nginx \ 检测环境是否搭建完成
通过scp命令上传文件到虚拟机
没有error就代表成功,然后输入make && make install
查看发现有四个目录代表安装成功
1.2、检测版本以及参数
验证版本
vim ~/.bash_profile
添加如图参数
然后source ~/.bash_profile重启服务
查看版本
1.3、参数以及进程
使用二进制nginx
nginx version: nginx/1.18.0 Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives] Options:
-?,-h : this help
-v : show version and exit
-V : show version and configure options then exit
#显示版本和编译参数
-t : test configuration and exit #测试配置文件是否异常
-T : test configuration, dump it and exit#测试并打印
-q : suppress non-error messages during configuration testing #静默模式
-s signal :send signal to a master process: stop, quit, reopen, reload
发送信号,reload信号 会生成新的worker,但master不会重新生成
-p prefix : set prefix path (default: /etc/nginx/)#指定Nginx 目录
-c filename : set configuration file (default: /etc/nginx/nginx.conf)
#配置文件路径
-g directives : set global directives out of configuration file #设置全局指令,注意和配置文件不要同时配置,否则冲突
-V参数 查看版本
Vim auto/cc/gcc 关闭debug
接着关闭nginx
Nginx -s stop
然后vim /usr/local/nginx/conf/nginx.conf
把第二行work_processes注释掉
然后nginx -g “work_processes 6”
接着使用ps aux | grep nginx
三、nginx功能及其高级配置
1、nginx启动文件
如果出现发现不了pid或者进程被占用可以用如下代码
[root@iZ2ze4ef9xk9hkxafq58d9Z ~]# pkill -9 nginx
[root@iZ2ze4ef9xk9hkxafq58d9Z ~]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
[root@iZ2ze4ef9xk9hkxafq58d9Z ~]# /usr/local/nginx/sbin/nginx -s reload
操作
vim /lib/systemd/system/nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStarPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExeReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
接着重载
Systemctl daemon-reload
然后启动
Systemctl enable --now nginx
2、平滑升级
2.1首先下载nginx更高的版本1.26.1
接着下载echo-nginx-module-0.63.tar.gz
解压后,进入1.26.1
使用如下命令编译新版本
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --add-module=/root/echo-nginx-module-0.63 --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_gzip_static_module --with-http_stub_status_module --with-pcre --with-stream --with-stream_ssl_module
接着输入make
2.2备份旧版本
2.3检测是否出现问题
通过命令ps ax | grep nginx查看进程号并鲨掉
Kill -USR2 42274
这里可以看到旧版本仍然生效
在这里回收旧版本,然后再查看发现已经更新了
3、回滚版本
3.1、卸载
如果发现新版本有问题,就使用回滚机制返回之前的版本
同样在sbin目录下,备份新版本cp nginx nginx.26
然后mv nginx.24 nginx
3.2、改变进程
鲨掉Kill -HUP 进程号
回收Kill WINCH 进程号
恢复原进程号
Kill -HUP 原进程号
Curl -I localhost
查看版本完成
4、nginx全局配置
Vim /usr/local/nginx/conf/nginx.conf
更改如下配置
检测
、
5、location用法
5.1、测试文件
首先创建vim /usr/nginx/conf.d/vhost.conf
然后重载,最后页面访问
5.2、测试优先级
对目录(~等于~*)>不带符号>^~>=
同时测试
6、nginx用户认证
6.1、Htpasswd命令
首先下载包
创建并给用户设置密码
如果是已有用户,去掉-c参数,否则创建新的会重置原用户
查看密码
6.2、测试登录界面
先创建目录,然后编辑conf文件,接着放入自己想要显示的放入html中
6.2.1、登录页面
登录后
6.2.2、错误页面
同样编辑conf文件
接着将自己想要展示的放在里面
随便测试一个错误界面
7、自定义日志
添加如图参数
创建目录重载nginx
8、nginx文件检测
Vim /usr/local/nginx/conf.d/vhost.conf
9、nginx长链接
9.1、配置
Yum install telnet -y
Nginx 下载服务器
首先mkdir /data/web/download
设置 dd if=/dev/zero of=/data/web/download/leefile bs=lM count=100
接着更改配置
9.2、测试
10、nginx状态页
Vim /usr/local/nginx/conf.d/vhost.conf
同时vim /usr/local/nginx/conf.d/status.conf
测试
11、nginx内置变量
11.1、更改配置文件并重载
11.2、更改hosts
#nginx的内置变量
server {
listen 80;
server_name var.timinglee.org;
root /data/web/html;
index index.html;
location /var {
default_type text/html;
echo $remote_addr;
echo $args;
echo $is_args;
echo $document_root;
echo $document_uri;
echo $host;
echo $remote_port;
echo $remote_user;
echo $request_method;
echo $request_filename;
echo $request_uri;
echo $scheme;
echo $server_protocol;
echo $server_addr;
echo $server_name;
echo $server_port;
echo $http_user_agent;
echo $http_cookie;
echo $cookie_key2;
}
}
12、nginx自定义变量
12.1、nginx配置代码
#nginx自定义变量
server {
listen 80;
server_name var.timinglee.org;
root /data/web/html;
index index.html;
location /var {
default_type text/html;
set $timinglee lee;
echo $timinglee;
}
}
测试
Ps:记得注释之前哪个vars.conf(全是血的教训)
13、Nginx网页重写
这里可以看到显示出我设置的文本
14、Break参数
15、Return参数
在curl之前打开windows命令提示符,cd C:/WINDOWS/system32/drivers/etc
Echo 本机IP var.handsomeyang > hosts(我的本地hosts)
16、Rewrite 临时和永久
17、Break和last
18、全站加密
Cd /usr/local/nginx/
Mkdir certs
Vim /usr/local/nginx/conf.d/vhost.conf
19、实现盗链
19.1、首先实现防盗链
在主机中
创建目录/var/www/html/images在主机172.25.254.100中下载图片到/data/web/html和images中,注意images中只能放一张图片,否则会陷入死循环。
19.2、实现盗链
在node2中
然后vim /var/www/html/index.html
19.3、refer对于ip访问和域名的区别
这里实现更改盗链为不可见
图片就找不到了,同时点击老杨
禁止了全栈,所以看不到了,直接使用www.handsomeyang.org是带了refer,而172.25.254.100是不带refer的。
所以ip访问是有的
这里设置对方盗链时,都扔到设置的图片哪里
20、nginx反向代理
20.1、准备
在上述两台机器上再克隆一台红帽9的,IP设为172.25.254.20
同时都echoIP到index
在主机curl两台机子
20.2、构建代理
vim /etc/httpd/conf/httpd.conf
Vim /usr/local/nginx/conf.d/vhost.conf
Ps:两个proxy必须注释一个
这种可以两个存在
同样vim vhost.conf
在node1主机中
Dnf install php -y
21、反向代理缓存
在node1也就是172.25.254.10中修改/etc/hosts,添加www.handsomeyang.org
接着ab -n1000 -c100 http://www.handsomeyang.org/static/index.html
接下来在主机中vim /usr/local/nginx/conf/nginx.conf
接着vim /usr/local/nginx/conf.d/vhost.conf
22、反向代理负载均衡
vim /usr/local/nginx/conf.d/vhost.conf
22.1、更改参数,测试域名
、
22.2、-b参数
22.3、bind参数
在node1,2里面安装bind
接着vim /etc/named.conf
接着systemctl restart named.service
23、fastcgi
23.1、环境搭建
去阿里云下载包
wget https://mirrors.aliyun.com/rockylinux/9.4/CRB/x86_64/kickstart/Packages/o/oniguruma-devel-6.9.6-1.el9.5.0.1.x86_64.rpm
去官网下载php包,解压后前往目录
接着make && make install
可能会等半个小时往上
去掉注释 pid = run/php-fpm.pid
Vim /usr/local/php/etc/php.ini
ps:血的教训,将protectsystem=full关掉,否则会报只读文件
24、nginx转发配置
ps:注意root 下面的路径
25、php的动态扩展模块
安装memcache模块
下载并上传memcache-8.2.tgz
解压tar -zxf memcache-8.2.tgz
然后cd到mem目录,yum install autoconf
Phpize
接着输入./configure && make && make install
复制测试文件到nginx发布目录中
26、配置php加载memcache模块
27、部署memcached
yum install memcached -y
记得在windows中/WINDOWS/SYSTEM32/drivers/etc/hosts本地解析域名
php.handsomeyang.org
在vhost配置