记一次生产环境部署遇到的问题,以及自己给自己挖的一些坑
一、ssl模块安装
查看 nginx 是否安装 http_ssl_module 模块。
$ /usr/local/nginx/sbin/nginx -V
注意:V是大写的
很显然我这里第一次安装时没有编译ssl模块,现在增加模块需要重新编译重新编译,先跳转到压缩包的目录里。然后执行
./configure --with-http_ssl_module --prefix=/usr/local/nginx-1.18.0
编译完执行
make
切记:不要执行
make install
当前目录会出现 objs 文件夹,我执行make命令的时候是在我解压出来的nginx目录里边,所有objs目录也在这里
用新的 nginx 文件覆盖当前的 nginx 文件。
$ cp ./objs/nginx /usr/local/nginx/sbin/
再次查看安装的模块(configure arguments: –with-http_ssl_module说明ssl模块已安装)。
$ /usr/local/nginx/sbin/nginx -V
...
configure arguments: --with-http_ssl_module
...
只需要编译ssl模块即可,不需要重新覆盖安装
二、证书配置
我的生产环境比较特殊,证书是客户提供的,所有都是现成的文件,我只管配置就可以
ssl配置部分
ssl_certificate #你的pem证书路径,包含文件名;
ssl_certificate_key #你的key文件路径,包含文件名;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:!MD5;
keepalive_timeout 65;
ssl_session_timeout 10;
ssl_session_cache shared:SSL:10;
add_header Strict-Transport-Security max-age=63072000;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
全部实例
user root;
worker_processes 1;
error_log logs/error.log error;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
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"';
client_max_body_size 20m;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
client_header_timeout 10;
client_body_timeout 10;
send_timeout 10;
server {
listen 443 ssl;
server_name #你的域名 或者生产服务器的ip;
ssl_certificate #你的pem证书路径,包含文件名;
ssl_certificate_key #你的key文件路径,包含文件名;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:!MD5;
keepalive_timeout 65;
ssl_session_timeout 10;
ssl_session_cache shared:SSL:10;
add_header Strict-Transport-Security max-age=63072000;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
#日志模块 不喜欢可以替换自己的
if ($time_iso8601 ~ '(\d{4}-\d{2}-\d{2})') {
set $tttt $1;
}
access_log logs/$tttt.access.log main;
location /#你想要过滤的字符串 {
proxy_pass #你想要代理的地址如:http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /#你想要过滤的字符串 {
proxy_pass #你想要代理的地址如:http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {
root #你的前端静态资源地址如:/home/test;
index index.html index.htm;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
server_name #你的域名;
rewrite ^(.*) https://${server_name}$1 permanent;
}
}
注意:nginx证书的后缀是pem,不是crt。我花了一上午时间验证了和这个问题。