Nginx基础(二)

nginx.conf配置文件实例详解

#定义 nginx 运行的用户和用户组
user www www;
#nginx 进程数,建议设置为等于 CPU 总核心数。
worker_processes 8;
#nginx 默认没有开启利用多核 CPU, 通过增加 worker_cpu_affinity 配置参数来充分利用多核 CPU 以下是 8 核的配置参数
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
#全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
error_log /var/log/nginx/error.log info;
#进程文件
pid /var/run/nginx.pid;
#一个 nginx 进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值 ulimit -n)与 nginx 进程数相除,但是 nginx 分配请求并不均匀,所以建议与 ulimit -n 的值保持一致。
worker_rlimit_nofile 65535;
#工作模式与连接数上限
events
{
    #参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll 模型是 Linux 2.6 以上版本内核中的高性能网络 I/O 模型,如果跑在 FreeBSD 上面,就用 kqueue 模型。
    #epoll 是多路复用 IO(I/O Multiplexing) 中的一种方式,但是仅用于 linux2.6 以上内核,可以大大提高 nginx 的性能
    use epoll;
    ############################################################################
    #单个后台 worker process 进程的最大并发链接数
    #事件模块指令,定义 nginx 每个进程最大连接数,默认 1024。最大客户连接数由 worker_processes 和 worker_connections 决定
    #即 max_client=worker_processes*worker_connections, 在作为反向代理时:max_client=worker_processes*worker_connections / 4
    worker_connections 65535;
    ############################################################################
}
#设定 http 服务器
http {
    include mime.types; #文件扩展名与文件类型映射表
    default_type application/octet-stream; #默认文件类型
    #charset utf-8; #默认编码
    server_names_hash_bucket_size 128; #服务器名字的 hash 表大小
    client_header_buffer_size 32k; #上传文件大小限制
    large_client_header_buffers 4 64k; #设定请求缓
    client_max_body_size 8m; #设定请求缓
    sendfile on; #开启高效文件传输模式,sendfile 指令指定 nginx 是否调用 sendfile 函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘 IO 重负载应用,可设置为 off,以平衡磁盘与网络 I/O 处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成 off。
    autoindex on; #开启目录列表访问,合适下载服务器,默认关闭。
    tcp_nopush on; #防止网络阻塞
    tcp_nodelay on; #防止网络阻塞
    ##连接客户端超时时间各种参数设置##
    keepalive_timeout  120;          #单位是秒,客户端连接时时间,超时之后服务器端自动关闭该连接 如果 nginx 守护进程在这个等待的时间里,一直没有收到浏览发过来 http 请求,则关闭这个 http 连接
    client_header_timeout 10;        #客户端请求头的超时时间
    client_body_timeout 10;          #客户端请求主体超时时间
    reset_timedout_connection on;    #告诉 nginx 关闭不响应的客户端连接。这将会释放那个客户端所占有的内存空间
    send_timeout 10;                 #客户端响应超时时间,在两次客户端读取操作之间。如果在这段时间内,客户端没有读取任何数据,nginx 就会关闭连接
    ################################
    #FastCGI 相关参数是为了改善网站的性能:减少资源占用,提高访问速度。下面参数看字面意思都能理解。
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;
    ###作为代理缓存服务器设置#######
    ###先写到 temp 再移动到 cache
    #proxy_cache_path /var/tmp/nginx/proxy_cache levels=1:2 keys_zone=cache_one:512m inactive=10m max_size=64m;
    ###以上 proxy_temp 和 proxy_cache 需要在同一个分区中
    ###levels=1:2 表示缓存级别,表示缓存目录的第一级目录是 1 个字符,第二级目录是 2 个字符 keys_zone=cache_one:128m 缓存空间起名为 cache_one 大小为 512m
    ###max_size=64m 表示单个文件超过 128m 就不缓存了  inactive=10m 表示缓存的数据,10 分钟内没有被访问过就删除
    #########end####################
    #####对传输文件压缩###########
    #gzip 模块设置
    gzip on; #开启 gzip 压缩输出
    gzip_min_length 1k; #最小压缩文件大小
    gzip_buffers 4 16k; #压缩缓冲区
    gzip_http_version 1.0; #压缩版本(默认 1.1,前端如果是 squid2.5 请使用 1.0)
    gzip_comp_level 2; #压缩等级,gzip 压缩比,1 为最小,处理最快;9 为压缩比最大,处理最慢,传输速度最快,也最消耗 CPU;
    gzip_types text/plain application/x-javascript text/css application/xml;
    #压缩类型,默认就已经包含 text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个 warn。
    gzip_vary on;
    ##############################
    #limit_zone crawler $binary_remote_addr 10m; #开启限制 IP 连接数的时候需要使用
    upstream blog.ha97.com {
        #upstream 的负载均衡,weight 是权重,可以根据机器配置定义权重。weigth 参数表示权值,权值越高被分配到的几率越大。
        server 192.168.80.121:80 weight=3;
        server 192.168.80.122:80 weight=2;
        server 192.168.80.123:80 weight=3;
    }
    #虚拟主机的配置
    server {
        #监听端口
        listen 80;
        #############https##################
        #listen 443 ssl;
        #ssl_certificate /opt/https/xxxxxx.crt;
        #ssl_certificate_key /opt/https/xxxxxx.key;
        #ssl_protocols SSLv3 TLSv1;
        #ssl_ciphers HIGH:!ADH:!EXPORT57:RC4+RSA:+MEDIUM;
        #ssl_prefer_server_ciphers on;
        #ssl_session_cache shared:SSL:2m;
        #ssl_session_timeout 5m;
        ####################################end
        #域名可以有多个,用空格隔开
        server_name www.ha97.com ha97.com;
        index index.html index.htm index.php;
        root /data/www/ha97;
        location ~ .*.(php|php5)?$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            include fastcgi.conf;
        }
        #图片缓存时间设置
        location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ {
            expires 10d;
        }
        #JS 和 CSS 缓存时间设置
        location ~ .*.(js|css)?$ {
            expires 1h;
        }
        #日志格式设定
        log_format access '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for';
        #定义本虚拟主机的访问日志
        access_log /var/log/nginx/ha97access.log access;
        #对 "/" 启用反向代理
        location / {
            proxy_pass http://127.0.0.1:88;
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            #后端的 Web 服务器可以通过 X-Forwarded-For 获取用户真实 IP
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            #以下是一些反向代理的配置,可选。
            proxy_set_header Host $host;
            client_max_body_size 10m; #允许客户端请求的最大单文件字节数
            client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,
            ##代理设置 以下设置是 nginx 和后端服务器之间通讯的设置##
            proxy_connect_timeout 90; #nginx 跟后端服务器连接超时时间(代理连接超时)
            proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
            proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
            proxy_buffering on;    #该指令开启从后端被代理服务器的响应内容缓冲 此参数开启后 proxy_buffers 和 proxy_busy_buffers_size 参数才会起作用
            proxy_buffer_size 4k;  #设置代理服务器(nginx)保存用户头信息的缓冲区大小
            proxy_buffers 4 32k;   #proxy_buffers 缓冲区,网页平均在 32k 以下的设置
            proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
            proxy_max_temp_file_size 2048m; #默认 1024m, 该指令用于设置当网页内容大于 proxy_buffers 时,临时文件大小的最大值。如果文件大于这个值,它将从 upstream 服务器同步地传递请求,而不是缓冲到磁盘
            proxy_temp_file_write_size 512k; 这是当被代理服务器的响应过大时 nginx 一次性写入临时文件的数据量。
            proxy_temp_path  /var/tmp/nginx/proxy_temp;    ##定义缓冲存储目录,之前必须要先手动创建此目录
            proxy_headers_hash_max_size 51200;
            proxy_headers_hash_bucket_size 6400;
            #######################################################
        }
        #设定查看 nginx 状态的地址
        location /nginxStatus {
            stub_status on;
            access_log on;
            auth_basic "nginxStatus";
            auth_basic_user_file conf/htpasswd;
            #htpasswd 文件的内容可以用 apache 提供的 htpasswd 工具来产生。
        }
        #本地动静分离反向代理配置
        #所有 jsp 的页面均交由 tomcat 或 resin 处理
        location ~ .(jsp|jspx|do)?$ {
            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_pass http://127.0.0.1:8080;
        }
        #所有静态文件由 nginx 直接读取不经过 tomcat 或 resin
        location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
        { expires 15d; }
        location ~ .*.(js|css)?$
        { expires 1h; }
    }
}

日志配置

一、access_log定义日志级别、位置(访问日志)

日志级别: debug > info > notice > warn > error > crit > alert > emerg

                     调试       信息       通知       警告      错误        严重      警报     紧急情况

语法格式:   
# 有就加路径
access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
# 没有就写off
access_log off;
默认值: access_log logs/access.log combined;
作用域: http, server, location, if in location, limit_except

二、log_format 定义日志格式

语法格式:log_format name [escape=default|json] string ...;
默认值:log_format combined "...";
作用域:http
# 一般就使用默认配置
log_format compression '$remote_addr - $remote_user [$time_local] '
                       '"$request" $status $bytes_sent '
                       '"$http_referer" "$http_user_agent" "$gzip_ratio"';
access_log /spool/logs/nginx-access.log compression buffer=32k;

常见日志变量说明表

日志变量变量说明
$remote_addr记录客户端 IP 地址,记录发起请求的远端服务器 IP,在代理场景下,通常指向代理服务器(而非真实客户端 IP)
$http_x_forwarded_for记录客户端 IP 地址(常用于代理场景,可获取真实客户端 IP)
$remote_user记录客户端用户名称
$request记录请求的 URL 和 HTTP 协议(如 GET、POST、DELETE 等请求方法),记录请求的完整信息,包含请求方式、URL 路径及 HTTP 协议版本,格式为「METHOD URL VERSION」(示例:GET /index.html HTTP/1.1)
$status记录请求的响应状态码(如 200 表示成功、404 表示资源未找到、500 表示服务器错误)
$body_bytes_sent发送给客户端的字节数,不包括响应头大小;与 Apache 模块 mod_log_config 的 “% B” 参数兼容
$bytes_sent发送给客户端的总字节数(包括响应头和响应体)
$connection连接的序列号
$connection_requests当前通过一个连接获得的请求数量
$msec日志写入时间,单位为秒,精度为毫秒
$pipe标识请求是否通过 HTTP 流水线(pipelined)发送:值为 “p” 表示是,值为 “.” 表示否
$http_referer记录请求的来源页面(即从哪个页面链接跳转访问当前页面)
$http_user_agent记录客户端浏览器相关信息(如浏览器类型、版本、操作系统、设备型号等,示例:Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/124.0.0.0 Safari/537.36)
$request_length请求的总长度(包括请求行、请求头和请求正文的字节数)
$request_time请求处理时间,单位为秒,精度为毫秒;从读取客户端第一个字节开始,到发送最后一个字符并写入日志为止
$time_iso8601按 ISO8601 标准格式记录的本地时间(格式示例:2024-05-20T15:30:45+08:00)
$time_local按通用日志格式记录的本地时间(格式示例:20/May/2024:15:30:45 +0800)

日志中每个字段的具体含义

日志变量变量说明
$http_x_real_ip记录客户端 IP 地址,通常结合负载均衡配置使用,用于获取真实客户端 IP(区别于代理服务器 IP)
$http_host记录当前请求的域名(如 example.comwww.test.cn 等)
$body_bytes_sent发送给客户端的响应体大小,仅统计响应内容字节数,不包含响应头的字节数

站点路径-location

root和alias(难点)

用于指定“静态资源在服务器上的存储目录”的指令(通常在 location 块中配置),

location /web1 {
    # root /var/www/html;  ->  /var/www/html/web1
    alias /var/www/html;  ->  /var/www/html
    index index.html;
}
  • root 指定站点的“根”路径;URL访问到的真实目录是“网站的根路径”+“URL目录”

    找文件的路径 = root 写的文件夹 + 用户请求里的完整路径

    • /web1 -> /var/www/html/web1;

    • 你给服务器配置:root /var/www/html;(意思是 “起点文件夹就定在 /var/www/html”);用户访问时,得在网址里写请求:/web1(意思是 “从起点文件夹出发,直接找里面的 web1 文件”)

    • 思考过程:起点(/var/www/html) + 用户请求(/web1) → 拼起来就是 /var/www/html/web1 —— 正好找到目标文件。

  • alias 指定是路径本身

    找文件的路径 = alias 写的文件夹 + 用户请求里 “去掉开头” 的路径

    • alias -> /var/www/html

    • 你给服务器配置:alias /var/www/html/;(注意末尾的 /!意思是 “只要用户请求,先跳到 /var/www/html 这个文件夹”);用户访问时,哪怕网址里写了多余的路径(比如 http://你的网站/随便写点/web1),请求本质是 /随便写点/web1

    • 思考过程:

      第一步:把用户请求里的 “开头部分”(/随便写点/)删掉,只留最后要的 web1; 第二步:把 alias 指定的路径(/var/www/html/)和剩下的 web1 拼起来 → /var/www/html/web1 —— 也找到目标文件。

基本语法

location [修饰符] 路径 {
    # 配置内容
}
  • 修饰符:可选,用于指定匹配的类型。

  • 路径:指定要匹配的URL路径。

  • 配置内容:匹配到路径后执行的指令。

常用修饰符

  1. 无修饰符:默认情况下使用前缀匹配,以该路径开头的路径都能匹配到; /

    location /api/ {
        proxy_pass http://api_server;
    }
    匹配所有以/api/开头的路径,例如/api/v1/users。
  2. =:精确匹配。只匹配指定的路径,不进行正则表达式或前缀匹配。 = /abc

    location = /login {
        proxy_pass http://login_server;
    }
    只匹配/login路径,不会匹配/login/或/login/index.html。
  3. ~:区分大小写的正则表达式匹配。

    location ~ \.php$ {
        proxy_pass http://php_server;
    }
    匹配所有以.php结尾的路径,例如/script.php。
  4. ~\*:不区分大小写的正则表达式匹配。

    location ~* \.(jpg|jpeg|png|gif)$ {
        root /var/www/images;
    }
    匹配所有以.jpg, .jpeg, .png, .gif结尾的路径,忽略大小写。
  5. ^~:前缀匹配,如果找到匹配项,将不再进行正则表达式匹配。

    location ^~ /static/ {
        root /var/www/static;
    }
    匹配所有以/static/开头的路径,优先于正则表达式匹配。

匹配优先级

在Nginx中,location的匹配优先级如下:

  1. 精确匹配=):最高优先级。

  2. 前缀匹配^~):优先于正则表达式匹配。

  3. 正则表达式匹配~~*):若有多个正则表达式匹配,则使用第一个匹配的规则。

  4. 前缀匹配(无修饰符):最低优先级。

重写与重定向(重点)

1. rewrite重写

rewrite 是在服务器内部改变 URL,客户端不会察觉到 URL 的变化。rewrite 通常用于将一个 URL 模式匹配到另一个 URL 模式,而不改变浏览器中的 URL。

语法:

rewrite 正则表达式 替换目标 [标志];
示例:
location /oldpage {
    rewrite ^/oldpage/(.*)$ /newpage/$1 last;
}

在这个例子中,当请求 /oldpage/something 时,Nginx 会将其内部重写为 /newpage/something,但浏览器中的 URL 不会改变。

常用标志:

  • last:停止处理当前的 location 块,并使用重写后的 URI 重新搜索新的 location 匹配。

  • break:停止处理当前的 location 块,并且不再进行任何重写或重定向。

  • redirect:返回一个临时的重定向给客户端。

  • permanent:返回一个永久重定向给客户端。

2. return重定向

重定向是让客户端浏览器实际改变 URL。Nginx 返回一个 HTTP 状态码(通常是 301 永久重定向或 302 临时重定向),告诉客户端浏览器去请求一个新的 URL。

示例:

location /oldpage {
    return 301 /newpage;
}

在这个例子中,当请求 /oldpage 时,Nginx 会返回一个 301 永久重定向状态码,告诉客户端浏览器去请求 /newpage。浏览器中的 URL 会改变为 /newpage

重写与重定向的区别

对比项rewrite 重写return 重定向
URL 是否改变客户端浏览器中的 URL 保持不变(用户无感知)客户端浏览器中的 URL 会发生变化(用户可见)
HTTP 状态码不涉及特殊 HTTP 状态码(通常返回 200 等成功状态码)会返回 301(永久重定向)或 302(临时重定向)状态码
应用场景1. 内部 URL 结构调整,如动态 URL 转静态 URL 2. 简化复杂 URL 路径 3. 隐藏真实文件路径1. 网站改版后旧 URL 指向新 URL 2. 域名更换或页面迁移 3. 强制 HTTP 跳转 HTTPS 等场景

综合示例

server {
    listen 80;
    server_name example.com;
​
    location /oldpage {
        # 内部重写
        rewrite ^/oldpage/(.*)$ /newpage/$1 last;
    }
​
    location /movedpage {
        # 临时重定向
        return 302 /newpage;
    }
​
    location /permanentlymovedpage {
        # 永久重定向
        return 301 /newpage;
    }
}

在这个示例中:

  • 请求 /oldpage/something 会被重写为 /newpage/something,但浏览器中的 URL 不会改变。

  • 请求 /movedpage 会被临时重定向到 /newpage,浏览器中的 URL 会改变,并且状态码是 302。

  • 请求 /permanentlymovedpage 会被永久重定向到 /newpage,浏览器中的 URL 会改变,并且状态码是 301。

总结

  • 使用 rewrite 进行内部 URL 重写,客户端不会察觉到 URL 的变化。

  • 使用 return 进行重定向,客户端会察觉到 URL 的变化,并且会收到一个 HTTP 状态码。

http状态码

HTTP 状态码是服务器对客户端请求的 “响应状态标识”,用 3 位数字分类表示不同结果,常见状态码可按 1xx(信息)、2xx(成功)、3xx(重定向)、4xx(客户端错误)、5xx(服务器错误) 五大类划分,以下是日常最常用的状态码及含义:

状态码类别英文名称核心含义(通俗解释)常见场景
200成功OK服务器 “成功接收并处理” 了请求,返回了客户端需要的数据(如网页、接口数据)。访问正常网页、调用接口获取数据成功。
301重定向Moved Permanently请求的资源 “永久搬家” 了,服务器告诉客户端 “以后别来旧地址了,直接去新地址”。网站域名更换(如 old.com 迁到 new.com)、页面永久迁移(旧 URL 指向新 URL)。
302重定向Found请求的资源 “临时搬到新地址”,服务器告诉客户端 “这次先去新地址,下次可能还回旧地址”。临时维护时跳转到 “维护页面”、登录后临时跳转到首页。
304重定向Not Modified客户端之前请求过该资源,现在资源 “没更新”,服务器让客户端 “直接用自己本地缓存的版本”。浏览器刷新网页时,静态资源(图片、CSS)未修改,避免重复下载。
400客户端错误Bad Request客户端发送的请求 “格式有问题”(如参数错、数据不完整),服务器 “看不懂”,无法处理。接口请求时少传必填参数、提交表单数据格式错误(如手机号填成字母)。
401客户端错误Unauthorized客户端 “没登录 / 登录失效”,需要先验证身份(如登录账号密码)才能访问资源。未登录时访问需要权限的页面(如个人中心)、接口调用时 Token 过期。
403客户端错误Forbidden客户端已登录,但 “权限不够”,服务器明确拒绝提供资源(即使登录也不能访问)。普通用户试图访问管理员后台、无权限查看他人隐私数据。
404客户端错误Not Found客户端请求的 “资源不存在”(可能是 URL 输错、页面被删除),服务器找不到对应的内容。访问不存在的网页(如输错网址)、请求已删除的接口。
405客户端错误Method Not Allowed客户端用了 “不被允许的请求方式”(如服务器只接受 GET,客户端却用 POST)。接口只支持 GET 请求,却用 POST 提交数据;表单提交方式与服务器要求不匹配。
500服务器错误Internal Server Error服务器 “内部出故障”(如代码报错、数据库连接失败),无法正常处理请求(不是客户端的问题)。后端代码有 Bug、服务器数据库突然断开连接、服务器资源耗尽。
502服务器错误Bad Gateway服务器作为 “网关 / 代理” 时,收到了上游服务器(如后端服务、另一台服务器)的 “无效响应”。后端服务(如 Java 服务、Python 服务)崩溃、服务器之间网络中断。
503服务器错误Service Unavailable服务器 “暂时无法提供服务”(如正在维护、负载过高),过一段时间可能恢复。网站正在停机维护、服务器访问量突增(如秒杀活动)导致资源占满。
504服务器错误Gateway Timeout服务器作为 “网关 / 代理” 时,等上游服务器响应 “超时了”(上游服务器处理太慢或没反应)。后端接口处理数据耗时过长(如复杂查询)、上游服务器负载高导致响应延迟。

签发https证书

HTTPS是HTTP(超文本传输协议)的安全版本。本质上,HTTPS在HTTP的基础上,通过SSL/TLS协议提供了数据加密、完整性保护和身份验证,以确保网络数据传输的安全性。

  • HTTPS = http + SSL/TLS

    • 用【数字证书】防冒充(签发机构,类似公章,用来确认对方是真的);

    • 用【非对称加密】安全传“钥匙”(避免钥匙被偷);

    • 用【对称加密】快速传数据(保证数据跑得快又安全);

    • 用【数字证书】防篡改(确认数据没被动手脚);

  • CA证书:防止“中间人攻击”

    • 中间人攻击的本质是“两头冒充”(冒充你、冒充网站),而CA证书的作用就是给网站的“身份”和“公钥”做官方背书——让你能通过浏览器确认:“我连的这个网站,确实是我想找的那个,不是中间人伪装的”。

  • 对称加密、非对称加密

    • 对称加密:加密解密都是一个密码,速度快,但是容易泄密;

    • 非对称加密:一方加密,另一方解密;

#1.检查nginx是否支持配置
nginx -V
#2.证书生成
ubuntu:
sudo apt-get install libssl-dev
centos:
yum install openssl
yum install openssl-devel
#3.生成证书
.key: RSA私钥(Private Key),用于加密和解密数据。
.csr: 证书签名请求(Certificate Signing Request),包含了证书申请者的公钥和相关信息,用于向证书颁发机构(CA)请求签发证书。
.crt: 自签名证书(Self-signed Certificate),由私钥持有者自行签名的证书,用于证明公钥的真实性。在这种情况下,私钥持有者也是证书颁发机构。
.pem: Diffie-Hellman参数,用于支持TLS协商过程中的密钥交换,确保通信的机密性和安全性。
## 1.进入证书目录(没有的话需要创建)
cd /etc/nginx/sslkey
## 2.创建本地私有密钥
openssl genrsa -out ssl.key 2048
## 3.按提示输入即可
openssl req -new -key ssl.key -out ssl.csr
## 4.创建证书crt
openssl x509 -req -days 1460 -in ssl.csr -signkey ssl.key -out ssl.crt
## 5.创建证书pem
openssl dhparam -out ssl.pem 2048
#4.Nginx 配置
server {
    listen       80;
    return 301 https://$host$request_uri;
}
​
server {
    listen 443   ssl;
    ssl_certificate                          /etc/nginx/sslkey/ssl.crt;
    ssl_certificate_key                        /etc/nginx/sslkey/ssl.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1.2;
    ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!KRB5:!aECDH:!EDH+3DES;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
}
# 检查配置项,并重启
nginx -t 
nginx -s reload

搭建文件下载服务器

autoindex on; # 开启目录索引
autoindex_exact_size on; # 以易读单位显示文件大小
autoindex_localtime on; # 显示文件的本地时间(而非 GMT 时间)
# 下面是一个最简化的配置
server {
        charset   utf-8,gbk; # windows 服务器下设置后,依然乱码,暂时无解  
        listen       9050 default_server;
        listen       [::]:9050 default_server;
        server_name  down.blog.com;
        root         /data/;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值