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.com、www.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路径。
-
配置内容:匹配到路径后执行的指令。
常用修饰符
-
无修饰符:默认情况下使用前缀匹配,以该路径开头的路径都能匹配到;
/location /api/ { proxy_pass http://api_server; } 匹配所有以/api/开头的路径,例如/api/v1/users。 -
=:精确匹配。只匹配指定的路径,不进行正则表达式或前缀匹配。= /abclocation = /login { proxy_pass http://login_server; } 只匹配/login路径,不会匹配/login/或/login/index.html。 -
~:区分大小写的正则表达式匹配。location ~ \.php$ { proxy_pass http://php_server; } 匹配所有以.php结尾的路径,例如/script.php。 -
~\*:不区分大小写的正则表达式匹配。location ~* \.(jpg|jpeg|png|gif)$ { root /var/www/images; } 匹配所有以.jpg, .jpeg, .png, .gif结尾的路径,忽略大小写。 -
^~:前缀匹配,如果找到匹配项,将不再进行正则表达式匹配。location ^~ /static/ { root /var/www/static; } 匹配所有以/static/开头的路径,优先于正则表达式匹配。
匹配优先级
在Nginx中,location的匹配优先级如下:
-
精确匹配(
=):最高优先级。 -
前缀匹配(
^~):优先于正则表达式匹配。 -
正则表达式匹配(
~和~*):若有多个正则表达式匹配,则使用第一个匹配的规则。 -
前缀匹配(无修饰符):最低优先级。
重写与重定向(重点)
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/;
}
2095

被折叠的 条评论
为什么被折叠?



