任务一总结nginx的配置结构和流量访问逻辑过程Nginx使用简洁而灵活的配置文件来定义服务器的行为。 配置文件通常包括全局配置、HTTP模块配置、Server配置以及Location配置。1.客户端client发起 HTTP/HTTPS 请求到 Nginx。 2.Nginx 的 Worker 进程通过多路复用技术接收请求根据请求类型和配置使用相应模块如 ht_proxy、ht_fastcgi 等进行处理。 3. 如果请求需要与后端服务器Backend交互Worker 进程通过指定协议HTTP、FastCGI 等将请 求转发给后端服务器。 4.后端服务器处理请求后返回响应Nginx 的 Worker 进程接收响应若配置了 Proxy Cache会根据 缓存策略决定是否缓存响应最后将响应返回给客户端。任务二搭建nginx完成二进制安装和多OS下的软件包安装过程在rokcy和Ubuntu上采用二进制安装时分别使用命令“yum install nginx和apt install nginx即可之后使用“sysgtemctl status nginx查看状态若不是active,则使用命令systemctl start nginx启动即可。若使用源码安装以rokcy为例首先准备编译环境使用命令“yum install gcc make gcc-c glibc glibc-devel pcre pcre-devel openssl openssl devel systemd-devel zlib-devel yum install libxml2 libxml2-devel libxslt libxslt-devel php-gd gd-devel”之后创建目录获取软件并解压“mkdir /softs; cd /softs wget https://nginx.org/download/nginx-1.23.0.tar.gz tar xf nginx-1.23.0.tar.gz”然后创建运行用户“useradd -r -s /usr/sbin/nologin nginx”之后定制配置“./configure --prefix/data/server/nginx --usernginx --groupnginx --with http_ssl_module --with-http_v2_module --with-http_realip_module --with http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module”在nginx-1.23.0/下然后依次使用“make和”make install编译并安装之后可以使用“chown -R nginx:nginx /data/server/nginx/”修改用户和用户组启动nginx的命令为“/data/server/nginx/sbin/nginx”若想要修改用nginx直接启动可使用命令“echo export PATH/data/server/nginx/sbin:$PATH /etc/bashrc”和“source /etc/bashrc“可使用”curl http://localhost/“进行浏览器访问具体结果如下图所示。之后使用”mkdir /data/server/nginx/run“创建PID目录并使用”chown -R nginx:nginx /data/server/nginx/run“更改用户和用户组最后在/data/server/nginx/conf/nginx.conf中修改pid文件路径为”pid /data/server/nginx/run/nginx.pid;“最后我们在/usr/lib/systemd/system/nginx.service中创建nginx服务脚本内容为[Unit] Descriptionnginx - high performance web server Documentationhttp://nginx.org/en/docs/ Afternetwork-online.target remote-fs.target nss-lookup.target Wantsnetwork-online.target [Service] Typeforking PIDFile/data/server/nginx/run/nginx.pid ExecStart/data/server/nginx/sbin/nginx -c /data/server/nginx/conf/nginx.conf ExecReload/bin/kill -s HUP $MAINPID ExecStop/bin/kill -s TERM $MAINPID LimitNOFILE100000 [Install] WantedBymulti-user.target。之后使用”systemctl daemon-reload“重载服务脚本后面我们就可以直接使用”systemctl start nginx来开启以及systemctl stop nginx来启动和关闭nginx服务了具体结果如下图所示。任务三完成nginx https配置防盗链重定向相关实践过程Nginx 中的 Https 功能需要 ngx_http_ssl_module 模块支持使用 Yum/apt 安装的 Nginx 中己经包含了该模块的功能如果使用的是自行通过源码编译安装的 Nginx需要在编译的时候指定相关编译项.https配置以Ubuntu10-0-0-13进行测试ip地址为10.0.0.13后面同理首先准备密钥环境使用命令下载“apt install easy-rsa -y”之后使用命令“cd /usr/share/easy-rsa/”切换到目录中并使用命令“./easyrsa init-pki”初始化环境之后使用命令“./easyrsa build-ca nopass”生成CA机构证书之后“./easyrsa gen-req sswang.magedu.com nopass”生成私钥和证书申请文件之后使用命令“./easyrsa sign-req server sswang.magedu.com”签发证书提示输入yes即可之后使用命令“cat pki/issued/sswang.magedu.com.crt pki/ca.crt pki/sswang.magedu.com.pem”合并服务器证书签发机构证书为一个文件并使用命令给私钥加读权限“chmod r pki/private/sswang.magedu.com.key”之后回到nginx的子配置文件中进行如下配置“server { listen 80 default_server; server_name sswang.magedu.com; root /data/server/nginx/web1; # return 301 https://$host$request_uri; # 301重定向 rewrite ^(.*) https://\$server_name\$1 permanent; #rewrite 重定向二选一 } server{ listen 443 ssl; server_name sswang.magedu.com; root /data/server/nginx/web1; # 定制ssl的能力 ssl_certificate /usr/share/easy-rsa/pki/sswang.magedu.com.pem; ssl_certificate_key /usr/share/easy-rsa/pki/private/sswang.magedu.com.key; ssl_session_cache shared:sslcache:20m; ssl_session_timeout 10m; }”最后使用命令“systemctl restart nginx”重启nginx服务。在rocky10-0-0-12主机中使用命令curl 10.0.0.13 -I会提示301跳转使用“curl https://10.0.0.13 -I”会提示证书不安全使用“curl https://10.0.0.13 -k”命令则可显示结果。如下图所示。源码下载和二进制下载下配置文件的区别二进制安装的nginx主配置文件默认是/etc/nginx/nginx.conf中删除默认的nginx站点配置“rm -rf /etc/nginx/sites-enabled/default”后可在/etc/nginx/conf.d/下直接定制子配置文件。这是由于主配置文件/etc/nginx/nginx.conf已经include了子配置文件夹。而源码下载的nginx中默认只有主配置文件/data/server/nginx/conf/nginx.conf我们可以添加子配置文件目录“/data/server/nginx/conf/conf.d如下图所示。为了使子配置文件目录“/data/server/nginx/conf/conf.d下的配置文件生效我们需要在主配置文件/data/server/nginx/conf/nginx.conf中额外添加”include /data/server/nginx/conf/conf.d/*.conf,具体如下图所示。重定向在 Nginx 中rewrite 指令用于重写 URI允许 Nginx 修改客户端请求的 URI基于此可用该 指令实现 URL 重定向修改请求参数改变请求含义改变 URL 结构等该指令来自于 ngx_http_rewrite_module 模块。首先在nginx服务机UBUNTU10-0-0-13(ip地址10.0.0.13后面同理执行命令echo 11111 /data/server/nginx/web1/1.html echo 22222 /data/server/nginx/web1/2.html echo 33333 /data/server/nginx/web1/3.html echo aaaaa /data/server/nginx/web1/a.html echo bbbbb /data/server/nginx/web1/b.html echo ccccc /data/server/nginx/web1/c.html来准备工作所有这些html文件都放在/data/server/nginx/web1/目录下然后在子配置文件下修改内容server { listen 80 default_server; root /data/server/nginx/web1; location /1.html { rewrite /1.html /2.html; # 访问1跳转到2 rewrite /2.html /3.html; # 访问2跳转到3 } location /2.html { rewrite /2.html /a.html; # 访问2跳转到a } } eof location /3.html { rewrite /3.html /b.html; # 访问3跳转到b } location /c.html { rewrite /c.html /3.html; # 访问c跳转到3 rewrite /3.html /1.html; # 访问2跳转到a rewrite /1.html /c.html; # 访问1跳转到c }之后使用命令重启服务“sysetmctl restart nginx,之后在rocky10-0-0-12上访问”curl 10.0.0.13/1.html、”curl 10.0.0.13/2.html、”curl 10.0.0.13/3.html、”curl 10.0.0.13/c.html可得到不同的跳转效果若添加break和last则分别表示停止在server里的跳转以及停止当前location里的跳转执行其他跳转的location具体配置如下图所示。在rocky10-0-0-12上的所有curl结果如下图所示。任务四完成nginx虚拟主机配置包括ip 多端口 多域名相关的配置ip多端口还是以UBUNTU10-0-0-13作为nginx服务器在子配置文件中我们进行如下配置server { listen 80; root /data/server/nginx/web1; } server { listen 81; root /data/server/nginx/web2; } server { listen 82; root /data/server/nginx/web3; }之后使用“systemctl restart nginx重启服务每个目录下的html文件内容如下图所示。之后我们在rokcy10-0-0-12上进行curl访问具体的访问信息如下图所示。下面我们来进行多域名相关的配置同样在UBUNTU10-0-0-13的子配置文件中改为下述内容server { listen 80 default_server; server_name www.a.com; root /data/server/nginx/web1; } server { listen 80; server_name www.b.com; root /data/server/nginx/web2; } server { listen 80; server_name www.c.com; root /data/server/nginx/web3; }注意default_server用来访问未知服务即访问的域名在server_name中都不存在时默认使用该server之后使用命令systemctl restart nginx重启服务之后在rocky10-0-0-12上分别进行访问具体演示如下图所示。任务五完成nginx反向代理和动静分离相关的演示nginx反向代理在ubuntu子配置文件中修改为server { listen 80 default_server; root /data/server/nginx/web1; location / { proxy_pass http://10.0.0.13:81; # 交给后端的81端口服务 proxy_connect_timeout 2s; # 设置连接超时时间为2s } } server { listen 81 default_server; root /data/server/nginx/web2; }如下图所示。之后使用systemctl restart nginx重启服务之后在rocky10-0-0-12中使用”curl 10.0.0.13:80进行访问注意在未配置反向代理时结果为nginx web1而此时反向代理将10.0.0.13:80的访问转为10.0.0.13:81,因此结果为nginx web2,如下图所示。