> 技术文档 > 云计算-----第七周

云计算-----第七周


1. 完成nginx编译安装脚本

一.二进制安装#ubuntu2204 中可安装的 nginx[root@ubuntu ~]# apt install nginx -y [root@ubuntu ~]# apt info nginx二.编译安装#安装编译工具链[root@ubuntu ~]# apt update[root@ubuntu ~]# apt install -y make gcc libpcre3 libpcre3-dev openssl libssl-dev zlib1g-dev#创建运行用户[root@ubuntu ~]# useradd -r -s /usr/sbin/nologin nginx#下载最新版源码并解压[root@ubuntu ~]# wget https://nginx.org/download/nginx-1.22.1.tar.gz[root@ubuntu ~]# tar xf nginx-1.22.1.tar.gz[root@ubuntu ~]# cd nginx-1.22.1/#编译安装[root@ubuntu nginx-1.22.1]# ./configure --prefix=/apps/nginx --user=nginx -group=nginx --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[root@ubuntu nginx-1.22.1]# make && make install#修改目录属主属组并查看[root@ubuntu nginx-1.22.1]# chown -R nginx.nginx /apps/nginx/#创建软链接[root@ubuntu nginx-1.22.1]# ln -sv /apps/nginx/sbin/nginx /usr/sbin/nginx[root@ubuntu ~]# ps aux | grep nginxroot 6810 0.0 0.1 6480 2320 pts/0 S+ 15:46 0:00 grep -color=auto nginx#直接启动nginx,一个master进程,一个 worker 进程[root@ubuntu ~]# nginx[root@ubuntu ~]# ps aux | grep nginxroot 6813 0.0 0.0 10176 948 ? Ss 15:46 0:00 nginx: master process nginxnginx 6814 0.0 0.1 10912 3656 ? S 15:46 0:00 nginx: worker process#先停止,直接启动不能用systemctl 管理[root@ubuntu ~]# nginx -s stop #创建PID 目录[root@ubuntu ~]# mkdir /apps/nginx/run[root@ubuntu ~]# chown -R nginx.nginx /apps/nginx/run#创建nginx服务脚本[root@ubuntu ~]# cat /usr/lib/systemd/system/nginx.service[root@ubuntu ~]# cat /usr/lib/systemd/system/nginx.service[Unit]Description=nginx - high performance web serverDocumentation=http://nginx.org/en/docs/After=network-online.target remote-fs.target nss-lookup.targetWants=network-online.target[Service]Type=forkingPIDFile=/apps/nginx/run/nginx.pidExecStart=/apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.confExecReload=/bin/kill -s HUP $MAINPIDExecStop=/bin/kill -s TERM $MAINPIDLimitNOFILE=100000[Install]WantedBy=multi-user.target#修改配置文件,设置pid文件路径[root@ubuntu ~]# cat /apps/nginx/conf/nginx.conf pid /apps/nginx/run/nginx.pid;#重载服务脚本[root@ubuntu ~]# systemctl daemon-reload#用服务启动[root@ubuntu ~]# systemctl start nginx#查看状态 Nginx 命令和信号 [root@ubuntu ~]# systemctl status nginx.service#导入man手册[root@ubuntu ~]# man nginxNo manual entry for nginx#导入man 手册[root@ubuntu ~]# cp nginx-1.22.1/man/nginx.8 /usr/share/man/man8/[root@ubuntu ~]# mandb[root@ubuntu ~]# whereis nginxnginx: /usr/sbin/nginx /usr/share/man/man8/nginx.8

2. 完成nginx平滑升级,总结步骤

        1.步骤

                1.新版本或配置准备:准备好新版本的 Nginx 可执行文件或配置文件,并确保它们没有

                问题

                2.新版本资源替换旧版本资源:进行资源替换,此步骤要备份旧版本资源,可以用作回滚

                3.发送信号:使用 nginx -s SIGUSR2,nginx -s reload 等方式向 Nginx 主进程发送重新

                加载的信号

                4.新的工作进程启动:Nginx 主进程接收到重新加载信号后,会启动新的工作进程,并使

                用新的配置 文件或软件版本

                5.平滑过渡:新的工作进程逐渐接管现有的连接。现有的连接会在旧的工作进程中继续

                处理,而新的 连接会由新的工作进程处理

                7.旧的进程退出:当旧的工作进程不再有活动连接时,它会被关闭

#修改当前配置文件,至少保证两个worker进程,便于测试[root@ubuntu ~]# cat /apps/nginx/conf/nginx.confworker_processes 2;#编译新版本[root@ubuntu ~]# wget https://nginx.org/download/nginx-1.24.0.tar.gz[root@ubuntu ~]# tar xf nginx-1.24.0.tar.gz [root@ubuntu ~]# cd nginx-1.24.0[root@ubuntu nginx-1.24.0]# ./configure --prefix=/apps/nginx --user=nginx --group=nginx --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 #只需要执行 make, 会在 objs 目录中生成新的二进制文件[root@ubuntu nginx-1.24.0]# make #新版二进制文件[root@ubuntu nginx-1.24.0]# ./objs/nginx -v nginx version: nginx/1.24.0 #现在正在使用的[root@ubuntu nginx-1.24.0]# nginx -v nginx version: nginx/1.22.1 #保留旧版二进制文件备份[root@ubuntu nginx-1.24.0]# mv /apps/nginx/sbin/nginx{,.122} [root@ubuntu nginx-1.24.0]# ls /apps/nginx/sbin/ nginx.122 #复制新的二进制文件[root@ubuntu nginx-1.24.0]# cp objs/nginx /apps/nginx/sbin/ [root@ubuntu nginx-1.24.0]# ls /apps/nginx/sbin/ nginx nginx.122 #检测,配置文件可用,版本己更新[root@ubuntu nginx-1.24.0]# nginx -t nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok nginx: configuration file /apps/nginx/conf/nginx.conf test is successful [root@ubuntu nginx-1.24.0]# nginx -v nginx version: nginx/1.24.0进程是旧版本进程[root@10 ~/nginx-1.24.0]$ ps auxf | grep nginxroot 5843 0.0 0.1 6480 2324 pts/1 S+ 03:57 0:00 \\_ grep --color=auto nginxroot 2365 0.0 0.1 10168 2380 ? Ss 02:09 0:00 nginx: master process /apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.confnginx 2728 0.0 0.1 10920 3796 ? S 03:32 0:00 \\_ nginx: worker processnginx 2729 0.0 0.1 10920 3796 ? S 03:32 0:00 \\_ nginx: worker process响应头还是旧版的[root@10 ~/nginx-1.24.0]$ curl 127.1 -IHTTP/1.1 200 OKServer: nginx/1.22.1Date: Tue, 05 Aug 2025 03:59:58 GMT#在服务端创建文件[root@ubuntu nginx-1.24.0]# dd if=/dev/zero of=/apps/nginx/html/test.img bs=1M count=100#向master 进程发送信号[root@ubuntu nginx-1.24.0]# kill -USR2 2365 #生成了新的PID文件[root@10 ~/nginx-1.24.0]$ ls -lh /apps/nginx/run/total 8.0K-rw-r--r-- 1 root root 5 Aug 5 05:24 nginx.pid-rw-r--r-- 1 root root 5 Aug 5 01:16 nginx.pid.oldbin#客户端限速下载[root@ubuntu ~]# wget --limit-rate=102400 http://10.0.0.152/test.img[root@10 ~/nginx-1.24.0]$ kill -WINCH 2365[root@10 ~/nginx-1.24.0]$ ps auxf | grep nginxroot 5918 0.0 0.1 6480 2296 pts/1 S+ 05:43 0:00 \\_ grep --color=auto nginxroot 2365 0.0 0.1 10168 2948 ? Ss 02:09 0:00 nginx: master process /apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.confnginx 2728 0.0 0.1 10920 3796 ? S 03:32 0:00 \\_ nginx: worker process is shutting downroot 5889 0.0 0.3 10180 6376 ? S 05:24 0:00 \\_ nginx: master process /apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.confnginx 5890 0.0 0.1 10916 3436 ? S 05:24 0:00 \\_ nginx: worker processnginx 5891 0.0 0.1 10916 3468 ? S 05:24 0:00 \\_ nginx: worker process #新的连接己经由新版本来响应了[root@10 ~/nginx-1.24.0]$ curl 127.1 -IHTTP/1.1 200 OKServer: nginx/1.24.0Date: Tue, 05 Aug 2025 05:44:43 GMTContent-Type: text/htmlContent-Length: 615Last-Modified: Mon, 04 Aug 2025 09:38:52 GMT下载请求结束后,旧的 woker 进程全部退出#观察一段时间后,如果业务没有问题,则可以继续发送信号,退出旧的 master 进程,至此升级完成[root@ubuntu nginx-1.24.0]# kill -QUIT 2365

3. 总结nginx核心配置,并实现nginx多虚拟主机

        1.nginx核心配置

                1.全局配置

                        1.全局配置段常见的配置指令分类

                                1.正常运行必备的配置

                                2.优化性能相关的配置

                                3.用于调试及定位问题相关的配置

                                4.事件驱动相关的配置

                        2.常用配置项
#全局配置常用配置项user user [group];  #指定worker 进程运行时的用户和组,默认值为 nobody worker_processes auto|N;  #指定启动的 worker 进程数量,N 表示具体数字,auto表示有几个CPU核心就开启几个进程worker_cpu_affinity auto|cpumask; #将worker进程绑定到指定的CPU核心,提升性能,默认不绑定,# auto 表示自动绑定,nginx 1.9.10 版本开始支持  #cpumask 写法  #有几颗CPU核就写几个数字,默认是0,表示占位符,从右往左数,如果占位符值为1,则表示绑定  # worker_processes 4;  # worker_cpu_affinity 0001 0010 0100 1000;  # 上述写法表示4个工作进程分别绑定到 0,1,2,这4个CPU核心上  # worker_processes 2;  # worker_cpu_affinity 0101 1010;  # 上述写法表示2个工作进程分别绑定到 0/2,1/3CPU核心上pid /path/file;  #pid 文件路径,该文件中保存的是 master 进程号,服务启动时自动生成该文件worker_priority N;  #worker 进程优先级,默认值为0,此处设定的是 nice值,取值为 -20 到 19worker_rlimit_nofile N; #所有worker进程可以打开的文件描述符数量之和,默认不限制  #此值并不仅仅是指nginx 与客户端的连接数,也包括与后端服务的连接数  #比如一个客户端请求一个PHP资源,Nginx要维持与客户端连接,也要维持后端FastCGI连接daemon on|off;#默认值为on, 表示以后台守护进程方式运行,off 表示前台运行master_process on|off;  #默认值为on, 表示以 master-worker 模式运行,off 只有master 进程,用于开发调试include /path/file;  #文件包含,指定要包含的文件路径及规则,可以使用通配符
                        3.evenets 配置项
#evnets 配置项events { worker_connections N; #默认值512,单个worker进程所支持的最大并发连接数,总的并发数用此值乘以worker 进程数 multi_accept on|off; #默认值 off,on 表示worker 进程一次可以接收多个新的连接请求,off 表示 worker 进程 #一次只能接收一个新连接,建议设置为 on accept_mutex on|off; #默认值 off,表示master 进程获得客户端请求后,会通知所有的 worker 进程,由当前状态 #最佳的worker 进程处理请求,此过程也被称为 惊群,on 表示 master 进程论流给 worker  #进程分配要处理的连接,此处建议设置为 on use method;  #指定事件驱动模型,默认不设置此项,nginx 会根据当前系统自行选择  #可用值 select|pool|kqueue|epoll|/dev/poll|eventport}

                 2.http配置

                        1.http配置
#http 配置中的常用配置项charset charset|off; #是否在响应头 Content-Type 行中添加字符集,默认 offsendfile on|off;  #默认值 off,on表示使用 sendfile 函数来传送据,即零拷贝tcp_nopush on|off; #默认值 off,表示有tcp数据了立即发送,on 表示等到数据包满载了再发送 #on 要配合 sendfile on 一起使用tcp_nodelay on|off; #此选项生效前提是开启了 keepalived,默认值 on表示立即发送数据,off 表示延时 #0.2S发送数据  keepalive_timeout timeout [header_timeout]; #会话保持的时长,单位为秒,第二个值会出现在响应头中,可以和第一个值不一样types_hash_max_size N; #默认值1024,用于设置 MIME型哈希表大小, #Nginx 使用 MIME 类型哈希表来加速 MIME 类型的查找过程,提高性能server_tokens on|off|build|string;  #默认值on,表示在响应头中显示 nginx 版本信息,off 表示不显示 #build 表示显示的是编译时设置的值--build=name, 1.11.10 版本开始支持 #string 指自定义字符串,商业版中支持server_names_hash_bucket_size N;  #默认值32|64|128,默认值具体取决于服务器缓存大小, #此项用于设置服务器名哈希桶大小,当配置了大量虚拟主机时,此项可用来提升性能server_name_in_redirect on|off;  #默认值off,表示在重定向时响应头中不包含 Server 行,on 表示显示 Server 头include /etc/nginx/mime.types;  #规定了各种后缀的文件在响应报文中的 Content-Type 对应的值default_type application/octet-stream;  #除了上述映射外,其它类型文件都用此值ssl_protocols[SSLv2][SSLv3][TLSv1][TLSv1.1][TLSv1.2][TLSv1.3]; #当前nginx 可支持的 ssl协议版本 #默认值 TLSv1 TLSv1.1 TLSv1.2 TLSv1.3ssl_prefer_server_ciphers on|off; #默认off,表示在 SSL/TLS 握手时优先使用客户端加密套件,on表示优先使用服务端套件access_log path [format [buffer=size] [gzip[=level]] [flush=time][if=condition]]; #访问日志的文件路径、格式以及其他一些选项 #默认值 logs/access.log combined, 禁用访问日志写成 access_log off; #path 指定文件路径 #format 指定日志格式,不指定格式则使用预定义的 combined #buffer=size 设置缓冲区大小,可以异步写 #gzip[=level] 启用gzip压缩,可以指定压缩比 #if=condition 设置条件,仅在满足时记录日志error_log file [level]; #指定错误日志路径和错误级别,默认值 error_log logs/error.log error; #可用级别包括ebug|info|notice|warn|error|crit|alert|emergerror_page code ... [=[response]] uri;  #定义指定状态码的错误页面,可以多个状态码共用一个资源gzip on|off;  #是否使用gzip 压缩数据后再传输,默认offgzip_vary on|off; #在启用了压缩的情况下,是否在响应头中添加 Vary:Accept-Encoding 行,默认off gzip_proxied off|expired|no-cache|nostore|private|no_last_modified|no_etag|auth|any ...; #是否对后端服务器的返回结果进行压缩,默认 offgzip_comp_level N; #设置压缩比,取值1-9,默认 1gzip_buffers number size; #设置用于gzip压缩的缓存空间大小,用 number * size,默认值 32 4k|16 8k #size 取值为系统内存页大小,与当前操作系统和平台有关gzip_http_version N; #用于设置开启gzip 压缩的http 协议的早小版本,默认值 1.1,因为有些客户端或浏览器 #不支持gzip压缩gzip_types mime-type ...; #根据响应资源的 MIME 来决定是否对数据进行压缩, 默认值 text/html
                        2.server配置
server 主要用来配置虚拟主机,可以在一台 web 服务器上支持多个域名[root@ubuntu ~]# cat /etc/nginx/sites-enabled/defaultlisten address[:port] [default_server] [ssl]; listen port [default_server] [ssl];listen unix:path [default_server] [ssl]; #当前虚以主机监听的ip,port,是否是default_server,是否支持ssl 等 #默认值 *:80|*:8000; 可以写多条,完全说明请参考官方文档ssl_certificate file; #当前虚拟主机证书和CA机构证书,放在一个文件中,默认值为空ssl_certificate_key file; #私钥文件路径,默认为空ssl_session_cache off|none|[builtin[:size]] [shared:name:size]; #是否启用 ssl 缓存,默认none #off 不使用 ssl 缓存 #none 通知客户端,当前支持 ssl session cache #builtin[:size] 使用 openssl 内建缓存,为每个worker 进程私有 #shared:name:size woker 进程共享缓存ssl_session_timeout N; #客户端连接可以复用ssl session cache中缓存的有效时长,默认5m ssl_ciphers ciphers; #指定 SSL/TLS 加密算法,默认值 HIGH:!aNULL:!MD5;法,排除 MD5 加密算法ssl_prefer_server_ciphers on|off; #默认off,表示在SSL/TLS握手时优先使用客户端加密套件,on表示优先使用服务端套件root path;  #当前虚拟主机网页文件目录,写在location中,文件路径是 root+location index file ...;  #当前虚拟主机的默认页面,可以写多个,按顺序生效,默认 index.html server_name name ...; #虚拟主机域名,可以写多个值,客户端请求头中的 Host 字段会与此处匹配 #默认值是\"\",用来匹配请求头中 Host 字段值为空的请求#还可以写成 _,@ 等用来表示无效域名,和listen中的default_server配合
                        3.location配置
一个 server 配置段中可以有多个 locatio 配置,用于实现从 uri 到文件系统的路径映射,Ngnix 会根据用户请求的 uri 来检查定义的所有location,按一定的优先级找出一个最佳匹配,而后应用其配置location 指令作用于 server 配置段中,也可以嵌套location [ = | ~ | ~* | ^~ ] uri { ... }location @name { ... } #配置段匹配规则=  #用于标准uri前,需要请求字串与uri精确匹配,区分大小写 ^~ #用于标准uri前,表示包含正则表达式,匹配以特定字符串开始,区分大小写~  #用于标准uri前,表示包含正则表达式,区分大小写~* #用于标准uri前,表示包含正则表达式,不区分大写/str #不带符号 匹配以 str 开头的 uri,/ 也是一个字符\\  #用于标准uri前,表示包含正则表达式并且转义字符,可以将 . * ?等转义为普通符号@name #定义#匹配规则优先级=, ^~, ~/~*, /str #常用配置项alias path;  #定义路径别名,把访问路径重新映射到其它目录,此指令仅用于 location 中,与 root 有本质区别root path;#定义网站在文件系统上的家目录,写在location中,文件的绝对路径等于外层 server 中定义的 root+locationindex file ...;  #当前配置段的默认页面,可以写多个,依次生效,默认 index.htmlreturn code [text]|code URL|URL; #直接给客户端返回状态码+字符串或URL,此指令后的其它指 令都不再生效proxy_pass URL;  #设置反向代理,将符合规则的请求转发到后端服务器进行处理fastcgi_pass address;  #通过fastCGI协议将请求转发到后端服务器进行处理,可以写在 ip:port 或 unix:/socektfastcgi_index name; #fastCGI协议的默认资源,默认为空 fastcgi_param parameter value [if_not_empty]; #设置传给fastCGI服务器的参数 key val格式deny address|CIDR|unix:|all; #拒绝访问的客户端,黑名单,可以是具体IP,网段,socket(1.5.1版本以上),所有allow address|CIDR|unix:|all; #允许访问的客户端,白名单,可以是具体IP,网段socket(1.5.1版本以上),所有 #deny 和 allow 指令同时存在时,按加载顺序生效 try_files file ... uri|file ... =code; #按顺序查询文件是否存在,返回第一个匹配到的,如果没有匹配到, #会内部重定向到最后一个参数

        2.实现nginx多虚拟主机

                1.基于域名实现多虚拟主机

[root@10 ~/nginx-1.24.0]$ cd /etc/nginx/sites-enabled/#设置两个域名配置文件[root@ubuntu sites-enabled]# vim www.xia.com server{ listen 80; server_name www.xia.com; root /var/www/html/www.xia.com; }[root@ubuntu sites-enabled]# vim www.xia.net server{ listen 80; server_name www.xia.net; root /var/www/html/www.xia.net; }#修改默认页面,创建网站目录和首页[root@ubuntu ~]# mv /var/www/html/index.nginx-debian.html /tmp/ [root@ubuntu ~]# echo \"welcome to nginx\" > /var/www/html/index.html [root@ubuntu ~]# mkdir /var/www/html/www.xia.{com,net}[root@ubuntu ~]# echo \"this page from com\" > /var/www/html/www.xia.com/index.html[root@ubuntu ~]# echo \"this page from net\" > /var/www/html/www.xia.net/index.html [root@ubuntu ~]# tree /var/www/html/ /var/www/html/ ├── index.html ├── www.xia.com │ └── index.html └── www.xia.net └── index.html#测试配置文件并重新加载服务[root@10 ~]$ nginx -tnginx: the configuration file /apps/nginx/conf/nginx.conf syntax is oknginx: configuration file /apps/nginx/conf/nginx.conf test is successful[root@10 ~]$ systemctl reload nginx.service #客户端配置域名解析并测试[root@ubuntu ~]# cat /etc/hosts 10.0.0.206 www.m99-magedu.com www.m99-magedu.net [root@ubuntu ~]# curl www.m99-magedu.com [root@ubuntu ~]# curl www.m99-magedu.net#修改配置[root@ubuntu ~]# cat /etc/nginx/sites-enabled/www.m99-magedu.com server{ listen 80; index index.html default.htm a.txt; server_name www.m99-magedu.com; root /var/www/html/www.m99-magedu.com; } #重载生效[root@ubuntu ~]# systemctl reload nginx.service [root@ubuntu ~]$ vim /etc/hosts[root@ubuntu ~]$ curl www.cswz.comthis page from com [root@ubuntu ~]$ curl www.cswz.netthis page from net 

                2.基于IP地址实现多虚拟主机

添加IP[root@10 ~]$ ip a a 10.0.0.216/24 dev ens33[root@10 ~]$ ip a a 10.0.0.226/24 dev ens33[root@10 ~]$ ip a a 10.0.0.236/24 dev ens33[root@10 ~]$ ip a s ens33为域名绑定不同的IP[root@ubuntu ~]$ cat /etc/nginx/sites-enabled/www.cswz.com server{ listen 10.0.0.226:80; server_name www.cswz.com; root /var/www/html/www.cswz.com;}[root@ubuntu ~]$ cat /etc/ngvim/sites-enabled/aaa.jswlb.org server{ listen 10.0.0.152:80; listen 10.0.0.216:80; server_name aaa.jswlb.org; root /var/www/html/aaa.jswlb.org;}[root@ubuntu ~]$ cat /etc/hosts127.0.0.1 localhost127.0.1.1 ubuntu# The following lines are desirable for IPv6 capable hosts::1 ip6-localhost ip6-loopbackfe00::0 ip6-localnetff00::0 ip6-mcastprefixff02::1 ip6-allnodesff02::2 ip6-allrouters10.0.0.152 www.cswz.net 10.0.0.216 aaa.jswlb.org10.0.0.226 www.cswz.com[root@ubuntu ~]$ curl 10.0.0.152yao 100g bcxc[root@ubuntu ~]$ curl 10.0.0.216yao 100g bcxc[root@ubuntu ~]$ curl 10.0.0.226this page from com [root@ubuntu ~]$ curl 10.0.0.236welcome to nginx

                3.基于端口号实现多虚拟主机

[root@ubuntu ~]$ cat /etc/nginx/sites-enabled/www.cswz.com server{ listen 88; server_name www.cswz.com; root /var/www/html/www.cswz.com;}[root@ubuntu ~]$ cat /etc/nginx/sites-enabled/aaa.jswlb.org server{ listen 81; listen 82; server_name aaa.jswlb.org; root /var/www/html/aaa.jswlb.org;}[root@ubuntu ~]$ systemctl reload nginx.service [root@ubuntu ~]$ curl 10.0.0.152:81yao 100g bcxc[root@ubuntu ~]$ curl 10.0.0.152:82yao 100g bcxc[root@ubuntu ~]$ curl 10.0.0.152:88this page from com [root@ubuntu ~]$ curl 10.0.0.152welcome to nginx

4. 根据课程演示,完成nginx日志格式定制

配置自定义格式[root@ubuntu /etc/nginx]$ cat ./sites-enabled/www.cswz.com ##自定义访问日志格式 - 字符串log_format basic \'$remote_addr - $remote_user [$time_local] \"$request\" \' \'$status $body_bytes_sent \"$http_referer\" \' \'\"$http_user_agent\" \"$http_x_forwarded_for\"\';#自定义访问日志格式 - json 字符串 log_format json_basic \'{\"remote_addr\": \"$remote_addr\", \' \'\"remote_user\": \"$remote_user\", \' \'\"time_local\": \"$time_local\", \' \'\"request\": \"$request\", \' \'\"status\": \"$status\", \' \'\"body_bytes_sent\": \"$body_bytes_sent\", \' \'\"http_referer\": \"$http_referer\", \' \'\"http_user_agent\": \"$http_user_agent\", \' \'\"http_x_forwarded_for\": \"$http_x_forwarded_for\"}\';server{ listen 80; server_name www.cswz.com; root /var/www/html/www.cswz.com;access_log /var/log/nginx/www.cswz.com_access.log basic;location /json{#记录json格式access_log /var/log/nginx/www.cswz.com_json_access.log json_basic; return 200 \"json\"; }location /test{ access_log off; return 200 \"text\"; }} 测试[root@ubuntu /etc/nginx]$ curl www.cswz.comthis page from com [root@ubuntu /etc/nginx]$ curl www.cswz.com/jsonjson[root@ubuntu /etc/nginx]$ cat /var/log/nginx/www.cswz.com_access.log 10.0.0.152 - - [08/Aug/2025:02:58:46 +0000] \"GET / HTTP/1.1\" 200 20 \"-\" \"curl/7.81.0\" \"-\"[root@ubuntu /etc/nginx]$ cat /var/log/nginx/www.cswz.com_json_access.log {\"remote_addr\": \"10.0.0.152\", \"remote_user\": \"-\", \"time_local\": \"08/Aug/2025:02:58:53 +0000\", \"request\": \"GET /json HTTP/1.1\", \"status\": \"200\", \"body_bytes_sent\": \"4\", \"http_referer\": \"-\", \"http_user_agent\": \"curl/7.81.0\", \"http_x_forwarded_for\": \"-\"}

5. 总结nginx反向代理及https安全加密

        1.nginx反向代理

                1.特点

                        1.代理服务器位于目标服务器和客户端之间

                        2.客户端向代理服务器发送请求,代理服务器将请求转发给一个或多个目标服务

                        器,并将其中一个目 标服务器的响应返回给客户端

                        3.目标服务器不知道最终客户端的身份,只知道有一个代理服务器向其发送请求

                        4.用于将客户端的请求分发给多个服务器,实现负载均衡

                2.基本配置

#转发到指定IP server{ listen 80; server_name www.cswz.com; #root /var/www/html/www.cswz.com; location /{ proxy_pass http://10.0.0.210;  default_Serve 配置} } #转发到指定IP指定端口server{ listen 80; server_name www.cswz.com; location /{ proxy_pass http://10.0.0.210:8080; } } #后端主机配置server { listen 8080; root /var/www/html/8080; } #转发到指定域名server{ #210要开启WEB服务,请求的是默认listen 80; server_name www.cswz.com; location /{ proxy_pass http://www.node-1.com; } } #后端主机配置server { listen 80; root /var/www/html/www.node-1.com; server_name www.node-1.com; }

                3.负载均衡

upstream group1{ server 10.0.0.210; server 10.0.0.159; } server{ listen 80; server_name www.cswz.com; location /{ proxy_pass http://group1; proxy_set_header host $http_host; } }# Real Server-1 配置server { listen 80; root /var/www/html/www.cswz.com; server_name www.cswz.com; } [root@ubuntu ~]# cat /var/www/html/www.cswz.com/index.html 10.0.0.210 index # Real Server-2 配置server { listen 80; root /var/www/html/www.cswz.com; server_name www.cswz.com; } [root@ubuntu ~]# cat /var/www/html/www.cswz.com/index.html 10.0.0.159 index

        2.https安全加密

server { listen 443 ssl; # 监听 443 端口并启用 SSL server_name yourdomain.com www.yourdomain.com; # 证书绑定的域名 # 指定证书和私钥文件路径 ssl_certificate /path/to/your_domain.crt; # 证书文件 (或包含完整链的 bundle) ssl_certificate_key /path/to/your_domain.key; # 私钥文件 # 性能与安全优化 ssl_session_cache shared:SSL:10m; # 会话缓存,减少握手开销 ssl_session_timeout 10m; # 会话超时时间 ssl_session_tickets off; # 如果支持,优先使用 session cache ssl_stapling on;  # OCSP Stapling (在线证书状态协议装订),提高验证速度与隐私 ssl_stapling_verify on;  # 验证 OCSP 响应 resolver 8.8.8.8 8.8.4.4 valid=300s; # 用于 OCSP 查询的 DNS 解析器 resolver_timeout 5s; # HSTS (HTTP Strict Transport Security) - 强制客户端使用 HTTPS add_header Strict-Transport-Security \"max-age=63072000; includeSubDomains; preload\" always; # 配置反向代理到后端 (通常是 HTTP,因为代理到后端通常是内网安全连接) location / { proxy_pass http://backend_upstream; # 指向 upstream 或具体后端地址 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; # 明确告知后端请求是通过 HTTPS 进来的 }}