nginx配置详解

:0.Nginx介绍

在这里插入图片描述

1.基本配置

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

最简配置如下

worker_processes  1;  
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    charset utf-8;
    server {
        listen       80; 
        server_name  localhost;        
        location / { 
            root   html;
            index  index.html index.htm;
        }   
    }   
}
  • worker_processes :启动nginx后,工作进程的数量,可以加大这个数字来提高nginx的处理请求的效率,但是这个数字也不能太大,因为进程是消耗系统内存资源的。调整一下这个数字,然后通过free指令可以査看一下内存容量的变化。建议和CPU核数一致。
  • worker_connections :连接数量,每个进程可以处理1024连接。
  • include mime.types :引入与配置文件同级目录的 mime.types,表示nginx能识别的各种文件的类型,如mp4、jpg等,如果能被识别,则在浏览器浏览时可以用默认的方式进行展示,否则会变为下载文件。
  • default_type application/octet-stream :如果有的文件类型不被识别,则以八进制文件流的方式处理。
  • charset utf-8 :网站统一编码。
  • server :虚拟主机,可以有多个。
  • location / :根目录配置
  • root html :网站的根目录,html是相对nginx安装目录 /usr/share/nginx 的,也可以使用绝对路径。

实验1.worker_processes

修改 worker_processes 为 2 后,重启nginx服务,查看进程

在这里插入图片描述

实验2.网站根目录

在这里插入图片描述

实验3.网站状态

在这里插入图片描述

在这里插入图片描述

2.server主机

2.1 基于端口

nginx配置

在这里插入图片描述

网页访问

在这里插入图片描述

2.2 基于IP

一张网卡配置两个ip测试即可

在这里插入图片描述

在这里插入图片描述

nginx配置

在这里插入图片描述

网页访问

在这里插入图片描述

2.3 基于域名

nginx配置

在这里插入图片描述

修改 C:\Windows\System32\drivers\etc\hosts

在这里插入图片描述

网页访问

在这里插入图片描述

3.nginx优化

3.1 隐藏 nginx版本

在生产环境中,需要隐藏 Nginx 的版本号,以避免泄漏 Nginx 的版本,使攻击者不能针对特定版本进行攻击。

隐藏版本前

在这里插入图片描述

修改配置

在这里插入图片描述

隐藏版本后

在这里插入图片描述

3.2 配置网页缓存

当 Nginx 将网页数据返回给客户端后,可设置缓存时间,以便在日后进行相同内容的请求时直接返回,以避免重复请求,加快访问速度。缓存时间一般针对静态资源进行设置,对动态网页不用设置缓存时间。

设置缓存前

在这里插入图片描述

修改配置

在这里插入图片描述

location ~* \.(gif|jpg|jepg|bmp|png|ico)$ {
    root /web/one;
    expires 1d;
}

解释

在这里插入图片描述

设置缓存后

在这里插入图片描述

3.3 设置连接超时

在企业网站中,为了避免同一个客户长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间。可以修改配置文件 nginx.conf,设置keepalive_timeout 超时时间。

修改配置

在这里插入图片描述

keepalive_timeout 第一个参数指定了与客户端的 keep-alive 连接超时时间,服务器将会在这个时间后关闭连接。可选的第二个参数指定了在响应头 Keep-Alive: timeout=time中的 time 值。这个头能够让一些浏览器主动关闭连接,这样服务器就不必去关闭连接了。没有这个参数,Nginx 不会发送 Keep-Alive 响应头。

在这里插入图片描述

3.4 日志切割

随着 Nginx 运行时间的增加,产生的日志也会逐渐增加,为了方便掌握Nginx 的运行状态,需要时刻关注 Nginx 日志文件。太大的日志文件对监控是一个大灾难,不便于分析排查,需要定期的进行日志文件的切割。

方法1.自定义脚本

编写脚本,把nginx日志移动到指定位置并以日期重命名,重新加载nginx配置生成新的日志,删除30天以前的日志

在这里插入图片描述

#!/bin/bash

log_date=`date -d "-1 day" "+%Y%m%d"`

log_path="/var/log/nginx" 

pid="/usr/local/nginx/logs/nginx.pid"

[ -d $log_path ] || mkdir -p $log_path

mv /usr/local/nginx/logs/access.log $log_path/my.com-access.log-$log_date

kill -USR1 `cat $pid`

find $log_path -mtime +30 | xargs rm -rf 

利用cron定时任务,每天凌晨1:30分执行脚本

在这里插入图片描述

方法2.logrotate

使用外部工具,如 logrotate 来管理日志切割。

以下是一个基本的 logrotate 配置示例,用于切割 Nginx 日志文件:

  • 安装 logrotate(大多数系统已预装)。
  • 创建一个 logrotate 配置文件,例如 /etc/logrotate.d/nginx,内容如下:
/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 nginx adm
    sharedscripts
    postrotate
        [ ! -f /nginx.pid ] || kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
    endscript
}

解释:

  • daily:日志文件将每天轮换一次。
  • rotate 14:只保存最近14天的日志。
  • compress:用 gzip 压缩旧的日志文件。
  • postrotate:轮换后运行的命令,这里是向 Nginx 主进程发送 USR1 信号,让其重新打开日志文件。

logrotate 守护进程定期执行任务(通常每天一次)。确保 /etc/cron.daily/logrotate 脚本存在。

这样配置后,logrotate 会自动管理 Nginx 的日志文件,每天轮换并压缩旧日志,确保日志文件不会占用太多磁盘空间。

3.5 worker 进程数

见:1.基本配置 — 实验1

worker_processes :启动nginx后,工作进程的数量,可以加大这个数字来提高nginx的处理请求的效率,但是这个数字也不能太大,因为进程是消耗系统内存资源的。调整一下这个数字,然后通过free指令可以査看一下内存容量的变化。建议和CPU核数一致。

3.6 fpm 参数优化

见:chapter04-源码编译构建LNMP/LNMP+discuz论坛.pdf — 6.其他

vim /usr/local/php/etc/php-fpm.d/www.conf
# 96行fpm进程启动方式,动态的
pm = dynamic
# 107行fpm进程启动的最大进程数
pm.max_children=20
# 112行动态方式下启动时默认开启的进程数,在最小和最大之间
pm.start_servers = 5
# 117行动态方式下最小空闲进程数
pm.min_spare_servers = 2
# 122行动态方式下最大空闲进程数
pm.max_spare_servers = 8
#重启php-fpm
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
netstat -anpt | grep 9000
ps -elf | grep php-fpm

3.7 网页压缩

Nginx 的 ngx_http_gzip_module 压缩模块提供了对文件内容压缩的功能,允许Nginx服务器将输出内容发送到客户端之前进行压缩,以节约网站的带宽,提升用户的访问体验。默认 Nginx 已经安装该模块,只需要在配置文件中加入相应的压缩功能参数对压缩性能进行优化即可。

修改配置

在这里插入图片描述

  • gzip on :开启 gzip 压缩输出
  • gzip_min_length1k :用于设置允许压缩的页面最小字节数
  • gzip_buffers 4 64k :表示申请 4 个单位为 64k 的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储 gzip 压缩结果
  • gzip_http_version 1.0 :用于设置识别 http 协议版本,默认是1.1,目前大部分浏览器已经支持 gzip 解压,但处理较慢,也比较消耗服务器 CPU 资源
  • gzip_comp_level 2 :用来指定 gzip 压缩比,1 压缩比最小,处理速度最快;9 压缩比最大,传输速度快,但处理速度最慢,使用默认即可
  • gzip_types text/plain :压缩类型,是对哪些网页文档启用压缩功能
  • gzip_vary on :选项可以让前端的缓存服务器缓存经过 gzip 压缩的页面

当页面大于1k时,会进行压缩

在这里插入图片描述

4. 防盗链

在企业网站服务中,一般都要配置防盗链功能,以避免网站内容被非法盗用,造成经济损失,也避免了不必要的带宽浪费。Nginx 的防盗链功能也非常强大,在默认情况下,只需要进行很简单的配置,即可实现防盗链处理。

再准备一台虚拟机(ip 192.168.9.5),安装web软件,测试盗链

在这里插入图片描述

修改配置

在这里插入图片描述

  • 注意1:把图片缓存的配置去掉
  • 注意1:需要配置 root 和 index,当然也可以把 location 中的 root 和 index 统一提到 server 节点
	    location ~* \.(gif|jpg|png|jpeg)$ {
            root    /web/one;
            index   index.html index.htm;
            valid_referers  *.my.com my.com;
            if ($invalid_referer) {
                return 403;
            }   
        }

网页测试

在这里插入图片描述

在这里插入图片描述

5.include

自助建站服务基本情况是:公司提供服务器、公网ip、域名,然后用户在网站上注册账号,公司给用户分配子域名,帮助用户创建站点根目录,在nginx上配置虚拟主机,同时还会提供ftp服务,让用户自己可以上传网站代码。往往一个服务器上可能都能跑几百个网站,那么问题来了,每一个网站都需要在nginx主配置文件中添加一个server节点,那么nginx配置文件会变得很大,很难管理,所以要换一种方式来管理配置文件,将每个网站的配置都单独拆分出来。

修改主配置 /usr/local/nginx/conf/nginx.conf

在这里插入图片描述

其中一个网站的独立配置 (注:一般域名、配置文件名、站点目录名都是同名的)

在这里插入图片描述

网站根目录

在这里插入图片描述

hosts文件
在这里插入图片描述

此时的网站效果

在这里插入图片描述

假如 one 网站的用户不再继续经营了,则可以把其配置文件改名让配置不再生效,如:one.my.com.conf.stop

此时重启服务后,再次访问 one.my.com,则会访问到 two.my.com

因为二级域名相同,nginx会默认打开成功加载了配置的后的第一个网站

在这里插入图片描述

在这里插入图片描述

根据这种情况,一般会定义此域名对应的默认网站,也就是官网,上面有用户注册、收费等等功能,可以使用 default_server 来指定默认网站

在这里插入图片描述

在这里插入图片描述

6.basic 认证

通过htpasswd生成认证信息,可以实现基于用户授权的访问控制,当客户端想要访问相应网站或者目录时,要求用户输入用户名和密码才能正常访问。

可以通过提供 htpasswd 的网站在线生成认证信息,也可以安装 httpd-tools 生成认证信息(见:05 Nginx网站服务.pdf)。

此处演示在线生成:http://www.jsons.cn/htpasswd

在这里插入图片描述

假设 two 网站需要认证后才可进入

把刚才的认证信息保存到文件中,如:

在这里插入图片描述

修改 two 网站的配置

在这里插入图片描述

  • w :表示开启这个功能,"two.my.com"是备注信息,可以随便写,一些老浏览器能看到,新浏览器都看不到备注信息了。
  • auth_basic_user_file :指定认证信息所保存的文件

重启 nginx服务后,访问

在这里插入图片描述

7.https 和 ssl

http属于明文传输数据,https是加密传输,也是现在的主流方式,需要ssl认证并进行相关配置。

  • 配置前提:安装 nginx时需要添加ssl模块 --with-http_ssl_module

  • ssl证书:可以在网站提供商处下载免费证书(如阿里云),也可以通过 openssl 生成(仅限实验)

从阿里云下载的证书如下,解压后有 key 和 pem 两个文件

在这里插入图片描述

此处演示 openssl 生成过程

# 生成密钥
openssl genrsa -out my.com.key 1024
# 生成证书并签字
openssl req -new -key my.com.key -out my.com.csr
openssl x509 -req -days 365 -sha256 -in my.com.csr -signkey my.com.key -out my.com.crt

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

此时生成的文件

在这里插入图片描述

nginx配置文件说明

在这里插入图片描述

修改配置

在这里插入图片描述

listen    443 ssl;

ssl_certificate /usr/local/nginx/cert/my.com.crt;
ssl_certificate_key /usr/local/nginx/cert/my.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256::!MD5";
ssl_prefer_server_ciphers on;

firewall允许https服务或放开443端口

在这里插入图片描述

重启nginx服务,测试网站: https://www.my.com 或者 https://www.my.com:443

在这里插入图片描述

如果此时访问 http://www.my.com 不会自动跳转 到 https,需要配置重定向

在这里插入图片描述

# 只配置 rewrite 即可 ,root 和 index 可以不用配置
rewrite ^/(.*)$ https://www.my.com:443/$1 permanent;

重启nginx服务,测试网站

http://www.my.com/ 会自动跳转至 https://www.my.com/

8.rewrite 和 return

在这里插入图片描述

在这里插入图片描述

rewrite

在这里插入图片描述

其他

在这里插入图片描述

不带 www 也可以访问

在这里插入图片描述

9.目录浏览

类似网站:https://cmake.org/files/

在这里插入图片描述

在这里插入图片描述

注:设置了目录浏览功能的网站,不能有 index.html 页面

10.访问控制

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

多个的话,也可以用网段 192.168.1.0/24

出现 403 forbidden 的可能:

在这里插入图片描述

11.location和优先级

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

注意:后面的 / 是多余的,如: ~* /a+

12.反向代理、负载均衡

负载均衡

请添加图片描述

步骤1.再准备一台虚拟机,配置好apache和测试页

注:此实验需要2台apache服务器、1台nginx服务器。

apache服务器上的网页应该是一致的,但为了测试效果,故意改为不同。

在这里插入图片描述
在这里插入图片描述
步骤2.修改nginx配置文件

在这里插入图片描述
步骤3.重启nginx服务,测试页面访问

结果:刷新页面,间隔显示2台apache的页面
在这里插入图片描述
在这里插入图片描述
补充(实验过程略):
在这里插入图片描述

Nginx 是一个高性能的开源 Web 服务器和反向代理服务器。它的配置文件是一个重要的部分,影响着服务器的行为和性能。下面是对 Nginx 配置文件的详细解释: 1. 配置文件位置: Nginx配置文件通常位于 /etc/nginx/nginx.conf。此外,可以通过 include 语句包含其他配置文件,使配置更加模块化。 2. 基本结构: Nginx配置文件由多个指令和块组成。指令是配置文件的最小单位,而块是由一对花括号括起来的指令集合。配置文件从上到下按顺序解析,遇到块会进一步解析块内的指令。 3. 主要指令: - worker_processes:指定 Nginx 创建的进程数。通常设置为 CPU 核心数的倍数。 - events:配置 Nginx 处理连接和请求的事件模型。 - http:定义 HTTP 服务器的全局配置。 - server:定义一个虚拟主机(或称为 server block),可以包含多个 location 块。 - location:根据请求的 URI 匹配规则,定义不同的请求处理方式。 4. 常用配置选项: - listen:指定监听的 IP 地址和端口。 - server_name:指定虚拟主机的域名。 - root:指定网站根目录。 - index:指定默认的索引文件。 - location:根据匹配规则指定不同的处理方式,如代理、重定向、静态文件处理等。 5. 变量和指令: Nginx 支持一些内置变量和指令,用于实现动态的配置和请求处理。常见的变量包括 $uri、$args 和 $http_user_agent,常见的指令包括 if、rewrite 和 return。 6. 配置文件的重载: 在修改配置文件后,可以通过发送信号给 Nginx 进程来重新加载配置,而无需停止服务器。常用的信号有 HUP(重新加载配置)和 TERM(停止服务器)。 这些是 Nginx 配置文件的一些基本概念和常用指令。具体的配置方式和使用方法可以根据实际需求进行深入学习和探索。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值