WEB服务器-Nginx源码安装及相关配置

news2024/11/17 21:40:42

一、web服务概述

二、Nginx 概述

三、Nginx源码安装

直接下载压缩包到/home家目录进行操作

3.1 下载所需环境

dnf install gcc pcre-devel zlib-devel openssl-devel -y

源码安装需要提前准备标准的编译器,GCC的全称是(GNU Compiler collection),其有GNU开发,并以GPL即LGPL许可,是自由的类UNIX即苹果电脑Mac OS X操作系统的标准编译器,因为GCC原本只能处理C语言,所以原名为GNU C语言编译器,后来得到快速发展,可以处理C++,Fortran,pascal,objective,java以及Ada等其他语言,此外还需要Automake工具,以完成自动创建Makefile的工作,Nginx的一些模块需要依赖第三方库,比如: pcre(支持rewrite),zlib(支持gzip模块)和openssl(支持ssl模块)等。

3.2 下载官方源码包

tar zxf nginx-1.24.0.tar.gz

解压

tar zxf nginx-1.24.0.tar.gz

解压完成后进入目录

cd nginx-1.24.0

创建Nginx源码安装的用户

useradd  -s /sbin/nologin -M nginx

3.3 源码安装

1.编译

./configure --prefix=/usr/local/nginx --add-module=/root/echo-nginx-module-0.63 --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

没有erroe错误提示则表示成功,错误多半是上面的环境没有准备

安装完成后nginx-1.24.0目录下会多出Makefile和objs两个文件目录

可以使用./configure --help命令查看命令帮助

参数解释:

./configure --prefix=/usr/local/nginx \

--user=nginx \                                  # 指定nginx运行用户

--group=nginx \                                # 指定nginx运行组

--with-http_ssl_module \                  # 支持https://

--with-http_v2_module \                   # 支持http版本2

--with-http_realip_module \              # 支持ip透传

--with-http_stub_status_module \    # 支持状态页面

--with-http_gzip_static_module \     # 支持压缩

--with-pcre \                                     # 支持正则

--with-stream \                                 # 支持tcp反向代理

--with-stream_ssl_module \             # 支持tcp的ssl加密

--with-stream_realip_module          # 支持tcp的透传ip

 2.安装

make && make install

 make  -j2                 源文件与系统C语言文件开始对接,可以使用-j指定编译时的CUP内核

make install               将objs目录中的东西拷贝到指定的目录/usr/local/nginx/

3 启动Nginx

 进入Nginx配置目录

cd /usr/local/nginx/

找到Nginx的启动程序

sbin/下有一个名叫nginx的可执行程序,这就是nginx的启动程序

cd sbin/

ll

执行/usr/local/nginx/sbin/nginx启动nginx

/usr/local/nginx/sbin/nginx

4.查看nginx是否启动

ps aux |grep nginx                             查看进程

netstat -antlupe | grep nginx                  查看端口号

netstat不存在时安装whatprovides包

dnf whatprovides */netstat  

5.访问

curl 172.25.254.130       #本机的ip地址

第三行看到Welcome to nginx!表示成功

6.nginx相关配置目录

/usr/local/nginx/conf

/usr/local/nginx/conf/nginx.conf 配置文件

7.查看版本

dnf list nginx

curl -I 172.25.254.130

8. 关闭nginx程序

/usr/local/nginx/sbin/nginx   -s   stop 

如果关闭不了

 ps aux |grep nginx查看进程号,然后使用kill -9 进程 杀死进程

9.启动Nginx

nginx     已经写入环境变量文件vim ~/.bash_profile

/usr/local/nginx/sbin/nginx
或者
/usr/local/nginx/sbin/nginx    -s    restart

10. 如果有问题直接卸载

rm  -rf  /usr/local/nginx/                      #相对于取消make && make install

make clean                                        #清除第1步编译./configure --prefix.....产生的配置文件

或者直接删除解压nginx压缩包的目录nginx-1.24.0/

 从第一步开始重新安装,可以是某个地方做错

3.4 Nginx配置调优

1. 关闭debug功能

查看/usr/local/nginx/sbin/nginx的大小,内存比较大,因为有debug模式,可以关掉

[root@localhost sbin]# du -sh nginx
5.5M    nginx

vim nginx-1.24.0/auto/cc/gcc 找到debug将下面一行注释 ,关闭debug

#debug
#CFLAGS="$CFLAGS -g"

2. 添加环境变量

将/usr/local/nginx/sbin写入环境变量文件vim ~/.bash_profile ,这样以后在任何地方直接执行nginx可以启动nginx程序

[root@localhost ~]# vim ~/.bash_profile 
export PATH=$PATH:/usr/local/nginx/sbin
[root@localhost ~]# source ~/.bash_profile 

添加到环境变量中以后,nginx==/usr/local/nginx/sbin/nginx  

 3. 启动脚本编写

vim /lib/systemd/system/nginx.service

[Unit]Description=The NGINX HTTP and reverse proxy serverAfter=syslog.target network-online.target remote-fs.target nss-lookup.targetWants=network-online.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

重启配置并检测生效

[root@localhost sbin]# systemctl daemon-reload 
[root@localhost sbin]# nginx -s stop
[root@localhost sbin]# ps aux | grep nginx
root       21627  0.0  0.0   6408  2296 pts/0    S+   01:53   0:00 grep --color=auto nginx
[root@localhost sbin]# systemctl enable --now nginx.service 
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.
[root@localhost sbin]# ps aux | grep nginx
root       21665  0.0  0.0   9920   940 ?        Ss   01:54   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx      21666  0.0  0.0  13760  4792 ?        S    01:54   0:00 nginx: worker process
root       21668  0.0  0.0   6408  2300 pts/0    S+   01:54   0:00 grep --color=auto nginx
[root@localhost sbin]# 

4. 在系统中设置nginx的最大链接数

vim /etc/security/limits.conf    在最下面添加以下内容

nginx - nofile 100000

5. 更改nginx配置文件

添加的内容是汉字注释下面的,如:#参数优化1,用户

vim /usr/local/nginx/conf/nginx.conf

#参数优化1,用户
user  nginx;
#参数优化2,内核
worker_processes  auto;
#四核
worker_cpu_affinity 0001 0010 0100 1000;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

#参数优化3,系统支持nginx打开的最大链接数量
events {
    worker_connections  100000;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;
...................................下面不用改,省略

nginx -s reload 重启nginx

查看

ps aux | grep nginx 查看内核数量

sudo -u nginx ulimit -a 下的open files 后的数量

3.5 平滑升级与版本回滚

3.5.1 平滑升级

有时候我们需要对 Nginx 版本进行升级以满足对其功能的需求,例如添加新模块,需要新功能,而此时Nginx有业务无法停掉,这时我们就可以选择平滑升级。

步骤:

  • 将旧 Nginx 二进制文件换成新 Nginx 程序文件(注意先备份 )
  • 向 master 进程发送 USR2 信号
  • master 进程修改 pid 文件名加上后缀 .oldbin, 成为 nginx.pid.oldbin
  • master 进程用新 Nginx 文件启动新 master 进程成为旧 master 的子进程 , 系统中将有新旧两个 Nginx 主
  • 进程共同提供 Web 服务 , 当前新的请求仍然由旧 Nginx 的 worker 进程进行处理 , 将新生成的 master 进程的 PID 存放至新生成的 pid 文件 nginx.pid
  • 向旧的 Nginx 服务进程发送 WINCH 信号,使旧的 Nginx worker 进程平滑停止
  • 向旧 master 进程发送 QUIT 信号,关闭老 master ,并删除 Nginx.pid.oldbin 文件
  • 如果发现升级有问题 , 可以回滚∶向老 master 发送 HUP ,向新 master 发送 QUIT

配置:

1.下载新版本并解压编译

[root@Nginx nginx]# tar zxf nginx-1.26.1.tar.gz
[root@Nginx nginx]# cd nginx-1.26.1/
[root@Nginx nginx-1.26.1]# ./configure --with-http_ssl_module --withhttp_v2_module --with-http_realip_module --with-http_stub_status_module --withhttp_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --
with-stream_realip_module
[root@Nginx nginx-1.26.1]# make           

2.此时可以查看到两个版本

[root@Nginx nginx-1.26.1]# ll objs/nginx /usr/local/nginx/sbin/nginx
-rwxr-xr-x 1 root root 1239416 Jul 18 15:08 objs/nginx
-rwxr-xr-x 1 root root 5671488 Jul 18 11:41 /usr/local/nginx/sbin/nginx

3.将旧版本的nginx命令备份并将新版本的nginx命令复制过去

[root@Nginx ~]# cd /usr/local/nginx/sbin/
[root@Nginx sbin]# cp nginx nginx.24
[root@Nginx sbin]# \cp -f /root/nginx/nginx-1.26.1/objs/nginx  /usr/local/nginx/sbin

USR2 平滑升级可执行程序,将存储有旧版本主进程PID的文件重命名为nginx.pid.oldbin,并启动新的nginx,此时两个master的进程都在运行,只是旧的master不在监听,由新的master监听80,此时Nginx开启一个新的master进程,这个master进程会生成新的worker进程,这就是升级后的Nginx进程,此时老的进程不会自动退出,但是当接收到新的请求不作处理而是交给新的进程处理。

[root@Nginx sbin]# ps aux | grep nginx  
[root@Nginx sbin]# kill -USR2 46548

5.回收旧版本

[root@Nginx sbin]# kill -WINCH 46548

6.检测版本信息

[root@Nginx sbin]# curl -I localhost

3.5.2 版本回滚

如果升级的版本有问题可以回滚

1.重新拉起旧版本的worker

[root@Nginx sbin]# cp nginx nginx.26
[root@Nginx sbin]# ls
nginx nginx.24 nginx.26
[root@Nginx sbin]# mv nginx.24 nginx
mv: overwrite 'nginx'? y

2.重新加载旧版本进程

[root@Nginx sbin]# kill -HUP 48732

3.回收新版本进程

[root@Nginx sbin]# kill -WINCH 52075

6.检测版本信息

[root@Nginx sbin]# curl -I localhost

四、Nginx相关实验配置

4.1 Nginx配置文件说明

配置文件位置:

·主配置文件:/usr/local/nginx/conf/nginx.conf

·子配置文件:/usr/local/nginx/conf.d/*.conf

子配置文件格式说明:
  • 配置文件由指令与指令块构成
  • 每条指令以;分号结尾,指令与值之间以空格符号分隔
  • 可以将多条指令放在同一行,用分号分隔即可,但可读性差,不推荐
  • 指令块以{ }大括号将多条指令组织在一起,且可以嵌套指令块
  • include语句允许组合多个配置文件以提升可维护性
  • 使用#符号添加注释,提高可读性
  • 使用$符号使用变量
  • 部分指令的参数支持正则表达式
主配置文件结构:

共四部分

main block:主配置段,即全局配置段,对http,mail都有效
#事件驱动相关的配置
event {
  ...
}
 
#http/https 协议相关配置段
http {
  ...
}
 
#默认配置文件不包括下面两个块
#mail 协议相关配置段
mail {
  ...
}
 
#stream 服务器相关配置段
stream {
  ...
}

主配置文件命令解释
[root@nginx-node1 ~]# vim /usr/local/nginx/conf/nginx.conf
#全局配置或默认配置,设置nginx的启动用户/组,启动的工作进程数量,工作模式,Nginx的PID路径,日志路径等。
#user  nobody;
worker_processes  1;                              #启动工作进程数数量
  
#error_log  logs/error.log;                       
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
 
#pid        logs/nginx.pid;
 
 
events {                                          #设置块,主要影响nginx服务器与用户的网络连接,比如是否允许同时接受多个网络连接,使用哪种事件驱动模型
                                                  #处理请求,每个工作进程可以同时支持的最大连接数,是否开启对多工作进程下的网络连接进行序列化等。
    worker_connections  1024;                     #设置单个nginx工作进程可以接受的最大并发,作为web服务器的时候最大并发数为worker_connections *worker_processes,
                                                  #作为反向代理的时候为(worker_connections * worker_processes)/2
}
 
 
http {                                             ##http块是Nginx服务器配置中的重要部分,缓存、代理和日志格式定义等绝大多数功能和第三方模块都可以在这设置,
                                                   #http块可以包含多个server块,而一个server块中又可以包含多个location块,
                                                   #server块可以配置文件引入、MIME-Type定义、日志自定义、是否启用sendfile、连接超时时间和单个链接的请求上限等。
    include       mime.types;
    default_type  application/octet-stream;
 
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
 
    #access_log  logs/access.log  main;
 
    sendfile        on;                             #作为web服务器的时候打开sendfile加快静态文件传输,指定是否使用sendfile系统调用来传输文件
                                                    #sendfile系统调用在两个文件描述符之间直接传递数据(完全在内核中操作)从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,操作效率很高,被称之为零拷贝,
                                                    #硬盘 >> kernel buffer (快速拷贝到kernelsocketbuffer) >>协议栈。
    #tcp_nopush     on;
 
    #keepalive_timeout  0;
    keepalive_timeout  65;                          #长连接超时时间,单位是秒
 
    #gzip  on;
 
    server {                                        #设置一个虚拟机主机,可以包含自己的全局块,同时也可以包含多个location模块
                                                    ##比如本虚拟机监听的端口、本虚拟机的名称和IP配置,多个server可以使用一个端口比如都使用80端口提供web服务
        listen       80;                            #配置server监听的端口
        server_name  localhost;                     #本server的名称,当访问此名称的时候nginx会调用当前serevr内部的配置进程匹配。
 
        #charset koi8-r;
 
        #access_log  logs/host.access.log  main;
 
        location / {                               #location其实是server的一个指令,为nginx服务器提供比较多而且灵活的指令都是在location中体现的,
                                                   #主要是基于nginx接受到的请求字符串对用户请求的UIL进行匹配,并对特定的指令进行处理
                                                   #包括地址重定向、数据缓存和应答控制等功能都是在这部分实现,另外很多第三方模块的配置也是在location模块中配置。
            root   html;                           #相当于默认页面的目录名称,默认是安装目录的相对路径,可以使用绝对路径配置。
            index  index.html index.htm;           #默认的页面文件名称
        }
 
        #error_page  404              /404.html;       #错误页面的文件名称
 
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {                          #location处理对应的不同错误码的页面定义到/50x.html,这个跟对应其server中定义的目录下。
            root   html;                                #定义默认页面所在的目录
        } 
 
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
 
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}
 
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
 
 
    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;
 
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
 
 
    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;
 
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;
 
    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;
 
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;
 
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
 
}
 
#和邮件相关的配置
#mail {
# ...
# } mail 协议相关配置段
 
#tcp代理配置,1.9版本以上支持
#stream {
# ...
# } stream 服务器相关配置段
#导入其他路径的配置文件
#include /apps/nginx/conf.d/*.conf
}

4.2 root和alias

root:指定web的家目录,在定义location的时候,文件的绝对路径等于 root+location
alias:定义路径别名,会把访问的路径重新定义到其指定的路径,文档映射的另一种机制;仅能用于
location上下文,此指令使用较少。
注意: root, 给定的路径对应于 location 中的 /uri 左侧的 /
           alias , 给定的路径对应于 location 中的 /uri 的完整路径
1.使用epoll事件驱动并将子配置文件目录映射到主配置文件中,重载文件

[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
events {
    worker_connections  100000;
    use epoll;                                #使用epoll事件驱动
}
http  {
    ######
    include "/usr/local/nginx/conf.d/*.conf"; #在响应报文中将指定的文件扩展名映射至MIME对应的类型
    ######
}

nginx -s reload    重启服务
 

2.创建子配置文件并写入规则,重载文件

[root@nginx ~]# mkdir -p /usr/local/nginx/conf.d
[root@nginx ~]# vim /usr/local/nginx/conf.d/vhost.conf 
server {
        listen 80;
        server_name www.rhel9.org;
        root /data/web/html;
        index index.html;
}

nginx -s reload                      重启

3.写入测试文字

echo www.rhel9.org > /data/web/html/index.html 

4.测试

记得做本地解析

server {
    listen 80;
    server_name web.rhel9.org;
 
    location /dirtest {                    #必须建立/mnt/dirtest才能访问
        root /mnt;
    }
 
    location /alias {                      #使用alias的时候uri后面如果加了斜杠,则下面的路径配置
必须加斜杠,否则403
        alias /mnt/dirtest;                #当访问alias的时候,会显示alias定义的/mnt/dirtest
里面的内容
}

4.3 location       

在一个 server 中 location 配置段可存在多个,用于实现从 uri到文件系统的路径映射, ngnix 会根据用户请求的 URI 来检查定义的所有 location ,按一定的优先级找出一个最佳匹配, 而后应用其配置在没有使用正则表达式的时候, nginx 会先在 server 中的多个 location 选取匹配度最 高的一个 uri, uri 是用户请求的字符串,即域名后面的 web 文件路径, 然后使用该 location 模块中的正则 url 和字符串,如果匹配成功就结束搜索,并使用此 location 处理 此请求。

匹配优先级: =, ^~, ~ / ~ * , /
location 优先级: (location =) > (location ^~ 路径 ) > (location ~,~* 正则顺序 ) > (location 完整路径 ) > (location 部分起始路径 ) > (/)

匹配符号说明
=用于标准 uri 前,需要请求字串与 uri 精确匹配,大小敏感 , 如果匹配成功就停止向下匹配并立即处理请求
^~用于标准 uri 前,表示包含正则表达式 ,并且匹配以指定的正则表达式开头,对 uri 的最左边部分做匹配检查,不区分字符大小写
~用于标准 uri 前,表示包含正则表达式 , 并且区分大小写
~*用于标准 uri 前,表示包含正则表达式 , 并且不区分大写
不带符号匹配起始于此 uri 的所有的 uri
\用于标准 uri 前,表示包含正则表达式并且转义字符。可以将 . * ? 等转义为普通符号

示例配置:

server {
    listen 80;
    server_name www.rhel9.org;
 
    location / {
        root /data/web/html/ccc;
    }
 
    location ^~ /images {
        root /data/web/html/ccc;
        index index.html;
    }
 
    location /images1 {
        root /data/web/html/ccc;
    }
 
    location ~* \.(gif|jpg|jpeg|bmp|png|tiff|tif|ico|wmf|js)$ {
        root /data/web/html/ccc;
        index index.html;
    }
}

4.4 用户认证功能

1.创建用户,完成后可查看信息

[root@nginx ~]# htpasswd -cm /usr/local/nginx/.htpasswd admin
New password: 
Re-type new password: 
Adding password for user admim
 
[root@nginx ~]# htpasswd -m /usr/local/nginx/.htpasswd ccc
New password: 
Re-type new password: 
Adding password for user ccc
 
[root@nginx ~]# cat /usr/local/nginx/.htpasswd 
admin:$apr1$okMzYJLu$Sk/0N1AUZoDjgpldJUi2a0
ccc:$apr1$DMbv5BB8$HbeB4TMW9UZfAScnzjkq.1

2.创建文件并写入测试文字

[root@nginx ~]# mkdir /data/web/ccc
[root@nginx ~]# echo ccc > /data/web/ccc/index.html 

3.子配置文件中写入规则并重启

[root@nginx ~]# vim /usr/local/nginx/conf.d/vhost.conf 
        location /ccc {
                root /data/web;
                auth_basic "login password !!!";                   #用户在浏览器看到的认证信息提示
                auth_basic_user_file "/usr/local/nginx/.htpasswd"; #http认证文件路径
        }

nginx -s reload         重启服务配置

访问,去Windows浏览器访问,输入创建的用户名和密码

4.5 自定义错误日志

自 定义错误页,同时也可以用指定的响应状态码进行响应

可用位置: http, server, location, if in location

error_page code ... [=[response]] uri;

示例:

listen 80;
server_name www.timinglee.org;
error_page 500 502 503 504 /error.html;
location = /error.html {
root /data/nginx/html;
}

重启 nginx 并访问不存在的页面进行测试

示例:自定义错误页面

[root@nginx ~]# mkdir /webdata/nginx/timinglee/lee/errors -p

[root@nginx ~]# echo error page > /webdata/nginx/timinglee/lee/errors/40x.html

[root@nginx ~]# vim /usr/local/nginx/conf.d/vhosts.conf

server {
    listen 80;
    server_name www.timinglee.org;
    error_page 404 /40x.html;
    location = /40x.html {
        root /webdata/nginx/timinglee/lee/errors;
    }
}

测试:

[root@nginx ~]# nginx -s reload
[root@nginx ~]# 

[root@nginx ~]# curl www.timinglee.org/40x.html/
error page

4.6 自定义错误日志

可以自定义错误日志

Syntax: error_log file [level];
Default:
error_log logs/error.log error;
Context: main, http, mail, stream, server, location
level: debug, info, notice, warn, error, crit, alert, emerg

示例:

[root@nginx ~]#  mkdir "/var/log/nginx" -p
[root@nginx ~]# vim /usr/local/nginx/conf.d/vhosts.conf 

server {
    listen 80;
    server_name www.timinglee.org;
    error_page 404 /40x.html;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    location = /40x.html {
        root /webdata/nginx/timinglee/lee/errors;
    }
}

重启nginx并访问不存在的页面进行测试并验证是在指定目录生成新的日志文件

[root@nginx ~]# nginx -s reload
[root@nginx ~]# curl www.timinglee.org/40x.html/
error page
[root@nginx ~]# cd /var/log/nginx/
[root@nginx nginx]# ls
access.log  error.log

4.7 检测文件是否存在

try_files 会按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI 的指向。最后一个参数是回退 URI 且必须存在,否则会出现内部500 错误
语法格式

Syntax: try_files file ... uri;
try_files file ... =code;
Default: —
Context: server, location

示例 : 如果不存在页面 , 就转到 default.html 页面

[root@nginx nginx]# mkdir -p /webdata/nginx/timinglee.org/lee/error/
[root@nginx nginx]# echo "index.html is not exist" > /webdata/nginx/timinglee.org/lee/error/default.html
[root@nginx nginx]# vim /usr/local/nginx/conf.d/vhosts.conf 
server {
    listen 80;
    server_name www.timinglee.org;

    #location /login {
    #    root /webdata/nginx/timinglee.org/lee;
    #    index index.html;
    #    auth_basic "login password";
    #    auth_basic_user_file "/usr/local/nginx/conf/.htpasswd";
    #}
    root /webdata/nginx/timinglee.org/lee;
    error_page 404 /40x.html;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    try_files $uri $uri.html $uri/index.html /error/default.html;
    location = /40x.html {
        root /webdata/nginx/timinglee/lee/errors;
    }
}

测试:

[root@nginx ~]# nginx -s reload

[root@nginx ~]# curl www.timinglee.org/40x.html/
index.html is not exist

4.8 长连接配置

keepalive_timeout timeout [header_timeout];         #设定保持连接超时时长, 0 表示禁止长连接,默认为75s
                                                                        #通常配置在http字段作为站点全局配置
keepalive_requests 数字;                                 #在一次长连接上所允许请求的资源的最大数量
                                                                                #默认为100次,建议适当调大,比如:500

示例:

keepalive_requests 3;
keepalive_timeout 65 60;
# 开启长连接后,返回客户端的会话保持时间为 60s ,单次长连接累计请求达到指定次数请求或 65 秒就会被断
开,第二个数字 60 为发送给客户端应答报文头部中显示的超时时间设置为 60s :如不设置客户端将不显示超时时间。
Keep-Alive:timeout=60                         #浏览器收到的服务器返回的报文
                                                        #如果设置为0表示关闭会话保持功能,将如下显示:
                                                                #Connection:close 浏览器收到的服务器返回的报文
# 使用命令测试:
[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
keepalive_timeout  65 60;
keepalive_requests  500;
[root@nginx ~]# telnet www.timinglee.org 80
Trying 192.168.10.140...
Connected to www.timinglee.org.
Escape character is '^]'.
GET / HTTP/1.1                ##输入动作
HOST: www.timinglee.org        ##输入访问HOST

                                                    ##输入回车

HTTP/1.1 200 OK
Server: nginx/1.24.0
Date: Tue, 20 Aug 2024 14:51:18 GMT
Content-Type: text/html
Content-Length: 24
Last-Modified: Tue, 20 Aug 2024 14:36:54 GMT
Connection: keep-alive
Keep-Alive: timeout=60
ETag: "66c4aa06-18"
Accept-Ranges: bytes

index.html is not exist

Trying 192.168.10.140...
Connected to www.timinglee.org.
Escape character is '^]'.
GET / HTTP/1.1                    #第一次操作     
HOST: www.timinglee.org                #第二次操作

                                                        #第三次操作

HTTP/1.1 200 OK
Server: nginx/1.24.0
Date: Tue, 20 Aug 2024 14:51:18 GMT
Content-Type: text/html
Content-Length: 24
Last-Modified: Tue, 20 Aug 2024 14:36:54 GMT
Connection: keep-alive
Keep-Alive: timeout=60
ETag: "66c4aa06-18"
Accept-Ranges: bytes

index.html is not exist

Connection closed by foreign host.          # 自动断开链接

4.9 作为下载服务器配置

ngx_http_autoindex_module 模块处理以斜杠字符 "/" 结尾的请求,并生成目录列表 , 可以做为下载服务配置使用

相关指令:

autoindex on | off; # 自动文件索引功能,默为 off
autoindex_exact_size on | off; # 计算文件确切大小(单位 bytes ), off 显示大概大小(单位 K、 M),默认 on
autoindex_localtime on | off ; # 显示本机时间而非 GMT( 格林威治 ) 时间,默认 off
autoindex_format html | xml | json | jsonp; # 显示索引的页面文件风格,默认 html
limit_rate rate; # 限制响应客户端传输速率 ( 除 GET 和 HEAD 以外的所有方法 ) ,单位
B/s,bytes/second , # 默认值 0, 表示无限制 , 此指令由ngx_http_core_module提供
set $limit_rate 4k; # 也可以通变量限速 , 单位 B/s, 同时设置 , 此项优级高 .

示例:实现下载站点

注意 :download 不需要 index.html 文件


    location /download {
        autoindex on;        #自动索引功能
        autoindex_exact_size on;     #计算文件确切大小(单位bytes),此为默认值,off只显示

大概大小(单位 kb 、 mb 、 g[root@nginx ~]#  mkdir -p /webdata/nginx/timinglee.org/lee/download
[root@nginx ~]# cp /root/anaconda-ks.cfg /webdata/nginx/timinglee.org/lee/download
[root@nginx ~]# vim /usr/local/nginx/conf.d/vhosts.conf 
server {
    listen 80;
    server_name www.timinglee.org;
    root /webdata/nginx/timinglee.org/lee;
    error_page 404 /40x.html;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    try_files $uri $uri.html $uri/index.html /error/default.html;
    location = /40x.html {
        root /webdata/nginx/timinglee/lee/errors;
    }b)

        autoindex_localtime on;        #on表示显示本机时间而非GMT(格林威治)时间,默为为off显示GMT时间

        limit_rate 1024k;        #限速,默认不限速
    }
}

重启 Nginx 并访问测试下载页面

五、高级配置

5.1 状态页

  • 基于nginx 模块 ngx_http_stub_status_module 实现,
  • 在编译安装nginx的时候需要添加编译参数 --with-http_stub_status_module
  • 否则配置完成之后监测会是提示法错误

配置:

location /nginx_status {
        stub_status;
        auth_basic "auth login";
        auth_basic_user_file /apps/nginx/conf/.htpasswd;
        allow 192.168.0.0/16;
        allow 127.0.0.1;
        deny all;
}
# 状态页用于输出 nginx 的基本状态信息:
# 输出信息示例:
Active connections: 291
server accepts handled requests
16630948 16630948 31070465
上面三个数字分别对应 accepts,handled,requests 三个值
Reading: 6 Writing: 179 Waiting: 106
Active connections:         #当前处于活动状态的客户端连接数
                                        #包括连接等待空闲连接数=reading+writing+waiting
accepts:                         #统计总值,Nginx 自启动后已经接受的客户端请求连接的总数。
handled:                         #统计总值,Nginx自启动后已经处理完成的客户端请求连接总数
                                        #通常等于accepts,除非有因worker_connections限制等被拒绝的
连接
requests:                         #统计总值,Nginx自启动后客户端发来的总的请求数
Reading:                                 #当前状态,正在读取客户端请求报文首部的连接的连接数
                                                #数值越大,说明排队现象严重,性能不足
Writing:                                 #当前状态,正在向客户端发送响应报文过程中的连接数,数值越大, 说明访问量很大
Waiting:                                 #当前状态,正在等待客户端发出请求的空闲连接数
                                           开启 keep-alive的情况下,这个值等于active –(reading+writing)

5.2 压缩功能

Nginx 支持对指定类型的文件进行压缩然后再传输给客户端,而且压缩还可以设置压缩比例,压缩后的文件大小将比源文件显著变小,样有助于降低出口带宽的利用率,降低企业的IT 支出,不过会占用相应的CPU 资源。
Nginx 对文件的压缩功能是依赖于模块 ngx_http_gzip_module, 默认是内置模

指令说明:

gzip on | off; 启用或禁用 gzip 压缩,默认关闭
gzip_comp_level 4;压缩比由低到高从 1 到 9 ,默认为 1 ,值越高压缩后文件越小,但是消耗 cpu 比较高。基本设定未 4 或者 5
gzip_disable "MSIE [1-6]\."; 禁用 IE6 gzip 功能,早期的 IE6 之前的版本不支持压缩
gzip_min_length 1k;gzip 压缩的最小文件,小于设置值的文件将不会压缩
gzip_http_version 1.0 | 1.1; 启用压缩功能时,协议的最小版本,默认 HTTP/1.1
gzip_buffers number size;指定 Nginx 服务需要向服务器申请的缓存空间的个数和大小 , 平台不同 , 默认 :32 4k 或者 16 8k;
gzip_types mime-type ...;指明仅对哪些类型的资源执行压缩操作 ; 默认为 gzip_types text/html ,不用显示指定,否则出错
gzip_vary on | off;如果启用压缩,是否在响应报文首部插入 “Vary: Accept-Encoding”, 一般建议打开
gzip_static on | off;

 预压缩,即直接从磁盘找到对应文件的 gz 后缀的式的压缩文件返回给用户,无需消耗服务器 CPU

注意 : 来自于 ngx_http_gzip_static_module 模块

配置:

[root@nginx ~]# mkdir /webdata/nginx/timinglee.org/lee/data -p
[root@nginx ~]#  cp /usr/local/nginx/logs/access.log /webdata/nginx/timinglee.org/lee/data/data.txt
[root@nginx ~]# ll /webdata/nginx/timinglee.org/lee/data/data.txt
-rw-r--r-- 1 root root 2494866 Aug 20 23:18 /webdata/nginx/timinglee.org/lee/data/data.txt
[root@nginx ~]# echo test > /webdata/nginx/timinglee.org/lee/data/test.html         #小于1k 的文件测试是否会压缩
[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
gzip  on;
gzip_comp_level  5;
gzip_min_length  1k;
gzip_types text/plain application/javascript application/x-javascript text/css
application/xml text/javascript application/x-httpd-php image/gif image/png;
gzip_vary on;
# 重启 Nginx 并访问测试:
[root@nginx ~]# nginx -s reload
[root@nginx ~]# 

[root@nginx ~]# curl --head --compressed www.timinglee.org/data/test.html
HTTP/1.1 200 OK
Server: nginx/1.24.0
Date: Tue, 20 Aug 2024 15:25:51 GMT
Content-Type: text/html
Content-Length: 5
Last-Modified: Tue, 20 Aug 2024 15:18:58 GMT
Connection: keep-alive
Keep-Alive: timeout=60
ETag: "66c4b3e2-5"
Accept-Ranges: bytes

[root@nginx ~]# curl --head --compressed www.timinglee.org/data/data.txt
HTTP/1.1 200 OK
Server: nginx/1.24.0
Date: Tue, 20 Aug 2024 15:26:08 GMT
Content-Type: text/plain
Last-Modified: Tue, 20 Aug 2024 15:18:05 GMT
Connection: keep-alive
Keep-Alive: timeout=60
Vary: Accept-Encoding
ETag: W/"66c4b3ad-261192"
Content-Encoding: gzip

5.3 变量

待续写

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2075891.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HAProxy 概述及搭建群集

一、HAProxy概述 HAProxy是可提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,是免费、快速并且可靠的一种解决方案。HAProxy非常适用于并发大(并发达1w以上)web站点,这些站点通常又需要会话保持或七层处理。HAProxy的运行模…

Cobalt Strike 4.8 用户指南-第三节-数据管理

3.1、概述 Cobalt Strike 团队服务器是行动期间 Cobalt Strike 收集的所有信息的中间商。Cobalt Strike 解析来自Beaconpayload 的输出,提取目标、服务和凭据。 如果想导出Cobalt Strike的数据,通过Reporting-->Export Data进行导出。Cobalt Strike…

DataX(Doris同步数据到SelectDB)

背景 由于之前的doris数仓在本地的服务器,当数据量越来越大,服务器的性能达不到要求,查询数据经常超时,故需要把本地的doris数仓部署到云上,本文以阿里云为例,迁移工具使用的阿里开源的datax。 datax官方文…

SpringBoot集成kafka开发-消息消费的分区策略(消费者如何判断从哪个分区中消费消息的?)

这里写目录标题 1、kafak消息者消费消息的4种分区策略2、kafka默认的消费分区策略1-RangeAssignor(均匀分配、默认分配策略)2.1、代码验证RangeAssignor的消息分区策略2.1.1、消费者2.1.2、生产者2.1.3、kafak配置类2.1.4、对象实体类2.1.5、项目配置文件…

LD3600F断路器LD3600F模块

LD3600F断路器LD3600F模块 LD3600F断路器LD3600F模块 LD3600F断路器LD3600F模块 LD3600F断路器LD3600F模块引脚线 LD3600F断路器LD3600F模块说明书 LD3600F断路器LD3600F模块接线图 LD3600F断路器是指能够关合、承载和开断正常回路条件下的电流并能在规定的时间内关合、承…

一款可以发送弹幕的播放器,快来看看

目录 介绍 一、基础使用 二、播放器配置 三、实现弹幕功能 四、总结 介绍 NPlayer是一款功能强大、响应式、可定制的播放器,基于TypeScript和Sass编写。NPlayer支持高定制,你可以轻松定制图标、主题颜色等,还可以集成插件,实…

C语言如何快速求值

题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 程序分析: 假设该数为 x。 1、则:x 100 n2, x 100 168 m2 2、计算等式:m2 - n2…

WPS 备注白条,演讲者模式看不到

问题描述: 演讲者模式的样子会变成白条,如: 解决方案: 清楚格式----清除备注的格式。因为之所以会出现这种情况,应该是备注变成了某种格式。 实现方式:

武汉流星汇聚:亚马逊跨境电商领航者,推动全球商业影响力新篇章

在全球化浪潮席卷而来的今天,跨境电商已成为推动世界经济一体化的重要力量,而亚马逊,作为这一领域的先驱与巨头,凭借其独特的商业模式、庞大的市场覆盖以及卓越的客户服务,在跨境电商市场中占据了举足轻重的地位。 亚…

28 支付服务Payment kit基本使用

新增订单(后续所有的操作都是基于订单) > 请求后端接口支付 携带订单id 请求后端支付接口(web组件的src)后端接受到请求后 会整合该笔订单所有信息 请求支付宝支付宝会返回一个该笔订单的支付链接由于我们使用的是web组件 这个支付链接会被打开 进入到支付流程支付完成后 支…

青龙面板本地部署流程结合内网穿透使用手机远程本地服务器薅羊毛

文章目录 前言一、前期准备本教程环境为:Centos7,可以跑Docker的系统都可以使用。本教程使用Docker部署青龙,如何安装Docker详见: 二、安装青龙面板三、映射本地部署的青龙面板至公网四、使用固定公网地址访问本地部署的青龙面板 …

NLP发展脉络-->特征优化阶段

NLP特征优化阶段 文本预处理特征提取降维与特征选择特征组合与扩展特征选择与评估特征工程的优化模型可解释性偏统计和规则的特征化阶段优缺点优点缺点 这是NLP的一个发展阶段。今天,我们就来了解一下NLP的特征优化阶段。特征优化在NLP的发展中曾经是一个至关重要的…

【案例58】WebSphere输出日志输出慢导致线程被阻塞

问题现象 系统非常卡顿 问题分析 分析javacore文件,寻找关键字,Flat locked by 3LKMONOBJECT org/apache/logging/log4j/core/appender/OutputStreamManager0x000000060FB6B3C0: Flat locked by "WebContainer : 3" (J9VMThread:0x0…

Ubuntu22.04安装深度学习的GPU环境详细教程(小白图文,显卡驱动、CUDA、cuDNN、PyTorch一步到位)

摘要:本博客详细介绍了如何在 Ubuntu 22.04 系统上安装和配置深度学习环境,包括 NVIDIA 驱动、CUDA Toolkit、cuDNN、Miniconda 及 PyTorch 等关键组件。文章从安装前的注意事项开始,逐步讲解了如何切换国内软件源以提升下载速度,…

【Android Studio】Webview 内核升级得三种方法(续)

【Android Studio】Webview 内核升级得三种方法(续) 前言对原理学习中对应的重点进行一个记录针对网页加载流量进行一个监控 前言 在之前的博文【Android Studio】Webview 内核升级得三种方法中,介绍了内核升级的三种方法,并提出…

ECCV2024|港中文提出文本生成3D方法DreamDissector,能够生成具有交互的多个独立对象。

DreamDissector 是一种文本生成3D对象的方法,通过将多对象文本生成的NeRF输入并生成独立的纹理网格,提供了对象级别的控制和多种应用可能性。 DreamDissector 可以生成具有合理交互的多个独立纹理网格,方便各种应用,包括对象级别的…

NFTScan | 08.19~08.25 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期:2024.08.19~ 2024.08.25 NFT Hot News 01/ CryptoPunk 5822 今日以未公开价格售出,曾在 2022 年以 8000 ETH 售出 8 月 19 日,据 nft now,CryptoPun…

企业终端电脑监控管理系统有哪些?推荐四款全功能级的电脑监控管理系统

企业终端电脑监控管理系统是现代企业管理中不可或缺的一部分,它们主要用于提升信息安全、防止数据泄露、提高工作效率,并确保企业合规性。以下是一些常见的企业终端电脑监控管理系统: 1. 安企神 7天试用免费版https://work.weixin.qq.com/ca…

学习笔记——IP组播——IP组播基本概述

二、IP组播基本概述 IP组播技术有效地解决了单播和广播在点到多点应用中的问题。组播源只发送一份数据,数据在网络节点间被复制、分发(PIM),且只发送给需要该信息的接收者。 1、前言 网络中存在各种各样的业务,从流…

★ OJ题 ★ 二叉树

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将和大家一起做一些二叉树的OJ题~ 目录 一 单值二叉树 二 相同的树 三 对称二叉树 四 二叉树的前序遍历 五 另一颗树的子树 六 二叉树遍历 一 单值二叉树 965. 单值二叉树 - 力扣&#xff08;LeetCode…