Nginx是目前web服务器占比第一(在https://w3techs.com 中可以看到Nginx占比33.1%)

Nginx支持静态资源提供服务,支持高并发,热部署,反向代理,缓存,负载均衡等功能,Nginx使用BSD许可证开源(允许修改Nginx源码来重新发布一个商业用途的(例如Tengine))

Nginx由Nginx二进制可执行文件,Nginx.conf,access.log,error.log组成

Nginx和Nginx plus的区别:Nginx开源,免费,Nginx plus闭源,不免费

Nginx编译安装

Mainline version版本是提供最新的功能,Stable version版本是目前的稳定版本,Legacy versions版本是过去的版本

下载Nginx

wget http://nginx.org/download/nginx-1.22.0.tar.gz

解压Nginx压缩包

tar -xzf nginx-1.22.0.tar.gz

其中auto目录有4个子目录(分别为cc(用于编译),lib(lib库),os(操作系统的判断),types(类型判断)),conf目录是Nginx配置目录,html目录是Nginx默认静态文件

conf目录是Nginx配置文件目录(例如nginx.conf),src目录是Nginx源代码目录

进入nginx目录然后进行编译

查看编译时支持的参数

./configure –help | more

使用默认参数编译

./configure –prefix=/home/nginx

编译完成的中间文件存会放在objs文件夹下

ngx_module.c是要编译进Nginx的模块,如果需要安装第三方模块需要在其修改

make编译

make install安装

进入/home/nginx,可以看到已经安装完成


安装

编译安装

apt install -y gcc gcc-c++ pcre pcre-devel openssl openssl-devel zlib zlib-devel

wget http://nginx.org/download/nginx-1.22.0.tar.gz

tar -zxvf nginx-1.18.0.tar.gz

cd nginx-1.18.0

make &&make install

一键安装(不推荐)

apt install nginx

检查是否安装完毕

nginx -v

nginx配置文件nginx.conf解读,一般在/etc/nginx下

user root; # nginx运行用户
worker_processes auto; # nginx进程数,一般会设置和CPU核数一致
error_log  /www/wwwlogs/nginx_error.log  crit; # 错误日志存储位置
pid        /www/server/nginx/logs/nginx.pid; # 进程PID存储位置
events{
        worker_connections 51200; # 单个后台进程的最大并发数
        multi_accept on; # 一个进程可以同时接受所有的新连接,关闭(off)的话一个进程只能接收一个连接,默认值为off关闭
    }
http{
        include       mime.types; # 文件扩展和类型的映射表
        default_type  application/octet-stream; # 默认文件的类型
        server_names_hash_bucket_size 512;
        client_header_buffer_size 32k;
        large_client_header_buffers 4 32k;
        client_max_body_size 50m;
        gzip on; # 开启gzip压缩
        gzip_min_length  1k; # 设置允许压缩的最小的字节数,这里设置1k,就是只有超过1k的文件才会被压缩
        gzip_buffers     4 16k; # 以16k为单位,以16k的4倍申请存储gzip压缩的数据流内存
        gzip_http_version 1.1; # 只有当http1.1协议版本可以执行gzip压缩
        gzip_comp_level 2; # 压缩比
        gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml; # 设置匹配MIME类型进行压缩,默认text/html是始终被压缩的
        gzip_vary on;
        gzip_proxied   expired no-cache no-store private auth; # 当nginx是反向代理时数据的压缩,expired表示启动压缩,如果header头中包含 "Expires" 头信息,,只有off是关闭数据压缩,any是无条件启动压缩
        server_tokens off;  # 隐藏版本号,避免404暴露nginx的版本
        access_log off; # nginx访问日志存储位置(off为关闭访问日志)
    
server
    {
        listen 80; # 监听端口
        server_name localhost; # 配置域名
        index index.html index.htm index.php;  # 默认页面
        root  /www/server/phpmyadmin; # 服务默认启动目录
        error_page   404   /404.html; # 404配置页面
        error_page   500 502 503 504  /50x.html # 50x服务错误配置页面
        include fastcgi.conf; # 使用fastCGI解析php

        location /
        {
            root /www/wwwroot; 
            index index.html index.htm index.php;
        }

        access_log  /www/wwwlogs/access.log; # nginx访问日志存储位置(off为关闭访问日志)
    }

可以看到网站根目录在/www/wwwroot

强制停止nginx服务 nginx -s stop

非强制停止(等待进程完成任务后停止) nginx -s quit

重载配置文件 nginx -s reload

限制访问权限

location /
{
    root /www/wwwroot; 
    index index.html index.htm index.php;
    allow 192.168.1.128; # 限制只有192.168.1.128可访问
    deny all # 禁止访问
}

nginx虚拟主机(可基于端口,域名(ip),别名设置虚拟主机)

server{
    listen 80; 
    server_name localhost;
    index index.html index.htm index.php; 
}
server{
    listen 80;
    server_name abc.xiaochenabc123.test.com;
    index index.html index.htm index.php; 
}
server{
    listen 80; # 监听端口
    listen 443 ssl http2; # 设置https ssl
    server_name xiaochenabc123.test.com; # 配置域名
    index  index.php index.html index.htm default.php default.htm default.html;
}

在上面例子中,可以看到端口都是80,但是域名不同,也就是说这里设置了3个虚拟主机,虚拟主机配置除了设置在/nginx/nginx.conf中,还可以设置在子配置文件(nginx/conf.d/default.conf)中,不同的虚拟主机都可设置在不同的子配置文件中

反向代理

server{
    listen 80;
    server_name abc.xiaochenabc123.test.com;
    location / {
           proxy_pass http://xiaochenabc123.test.com;
           index  index.html;
    }
}

在该配置中,访问abc.xiaochenabc123.test.com会反向代理到http://xiaochenabc123.test.com中


Nginx命令(例如nginx -s quit)

查看帮助

nginx -?或者nginx -h

使用指定配置文件

nginx -c nginx-01.conf

指定配置指令(覆盖nginx.conf内的指令)

nginx -g “user root;”

立即关闭nginx服务

nginx -s stop

处理完毕全部请求后再停止服务

nginx -s quit

重载配置文件

nginx -s reload

重新记录日志

nginx -s reopen

查看配置文件是否出错(大小写都可以)

nginx -t

查看nginx信息(大V是编译信息小写v是版本信息)

nginx -v

指定nginx运行目录

nginx -p /nginx/


开启缓存

proxy_cache_path /data/cache levels=1:2 keys_zone=oncache:10m max_size=10g inactive=60m;

/data/cache是缓存目录,levels是缓存目录的优先级,例如1:2(二级目录),表示/data是一级目录,/cache是二级目录,keys_zone是定义共享内存区的名称和大小(oncache是名称,10m是内存区的大小),max_size是缓存的最大大小,inactive表示该缓存不在该指定时间内被访问,将从缓存中删除


Goaccess(可视化监控access日志)


SSL证书

申请人通过登记机构(具备验证申请人的身份)发送证书签名申请(CSR)到CA机构,CA机构再将公钥私钥发送给登记机构,登记机构再给申请人

当访问服务端时,会发送申请证书的请求,服务端接收到请求时会将公钥发送给客户端,客户端会验证证书的有效性,CA会将过期证书发送给CRL服务器(浏览器验证时发送请求给CRL服务器)(性能很差),一般通过OCSP(在线证书状态协议)验证,OCSP是服务端主动获取的结果,然后随着握手协商时发送给客户端,不需要客户端去验证

开启OCSP Stapling

server {
    listen 443 ssl;
    server_name test.xiaochenabc123.test.com;
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s; #OCSP请求的DNS服务器
    resolver_timeout 5s;
    ssl_trusted_certificate nginx.pem; #证书公钥(pem格式)
}

查看是否开启OCSP Stapling

openssl.exe s_client -connect https://test.xiaochenabc123.test.com:443 -status

没有开启会返回OCSP response: no response sent