缺省情况下openwrt带的Nginx是没带ngx_http_ssl_module的,需要重新编译一个ngxin版本带上ngx_http_ssl_module,

编译安装nginx

  1. nginx -v #查看当前安装nginx版本
  2. nginx -V #查看当前安装nginx版本的详细信息
  3. #下载当前nginx版本的源码
  4. wget http://nginx.org/download/nginx-1.12.2.tar.gz
  5. tar -xzvf nginx-1.12.2.tar.gz
  6. #编译nginx还需要安装下列包gcc-c++ zlib zlib-devel pcre pcre-devel openssl openssl-devel
  7. #安装编译器
  8. opkg install gcc
  9. ln -s /usr/bin/gcc-4.9 /usr/bin/cc #不然会提示C compiler cc is not found
  10. #下载libpcre的源码
  11. wget https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz
  12. cd nginx的源码目录
  13. # –prefix 即编译后nginx的安装目录
  14. ./configure --prefix=/usr --with-http_stub_status_module --with-http_ssl_module --with-pcre=/root/pcre-8.43 --with-openssl=/usr/bin --with-zlib=/usr/lib
  15. #上面代码会再当前目录下生成个Makefile文件 和objs文件夹,objs文件夹内还有个Makefile可直接修改
  16. make #开始编译
  17. make install #安装到上面指定的--prefix目录

SSL配置文件

全局配置:

  1. # 运行用户,默认即是nginx,可以不进行设置
  2. user nginx;
  3. #Nginx进程,一般设置为和CPU核数一样
  4. worker_processes 1;
  5. #错误日志存放目录
  6. error_log /var/log/nginx/error.log warn;
  7. #进程pid存放位置
  8. pid /var/run/nginx.pid;
  9. events {
  10. worker_connections 1024; # 单个后台进程的最大并发数
  11. }
  12. http {
  13. include /etc/nginx/mime.types; #文件扩展名与类型映射表
  14. default_type application/octet-stream; #默认文件类型
  15. #设置日志模式
  16. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  17. '$status $body_bytes_sent "$http_referer" '
  18. '"$http_user_agent" "$http_x_forwarded_for"';
  19. access_log /var/log/nginx/access.log main; #nginx访问日志存放位置
  20. sendfile on; #开启高效传输模式
  21. #tcp_nopush on; #减少网络报文段的数量
  22. keepalive_timeout 65; #保持连接的时间,也叫超时时间
  23. #gzip on; #开启gzip压缩
  24. include /etc/nginx/conf.d/*.conf; #包含的子配置项位置和文件
  25. }

站点配置:

  1. server {
  2. server_name yuming.cn; ##需要代理的域名
  3. listen 443 ssl;
  4. #定义服务器的默认网站根目录位置
  5. root /web/www/website/dist;
  6. #设定本虚拟主机的访问日志
  7. access_log logs/nginx.access.log main;
  8. #腾讯云推荐的配置
  9. ssl on; ##如果安装的是新版本下不需要
  10. ssl_certificate certPath/cert.pem; #证书
  11. ssl_certificate_key certPath/cert.key;#私钥
  12. ssl_session_timeout 3m;#超时时间
  13. ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
  14. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  15. #优先采取服务器算法
  16. ssl_prefer_server_ciphers on;
  17. location / {
  18.   proxy_pass http://120.xx.xx.xx:9006; ##这里写需要转发的项目地址
  19.   }
  20. #静态文件,nginx自己处理
  21. location ~ ^/(images|javascript|js|css|flash|media|static)/ {
  22. #过期30天,静态文件不怎么更新,过期可以设大一点,
  23. #如果频繁更新,则可以设置得小一点。
  24. expires 30d;
  25. }
  26. #禁止访问 .htxxx 文件
  27. # location ~ /.ht {
  28. # deny all;
  29. #}
  30. }
  31. server
  32. {
  33. listen 80;
  34. server_name XXX.com;
  35. #访问http的时候自动跳转到https
  36. rewrite ^(.*) https://$host$1 permanent;
  37. }

重新加载配置

  1. nginx -t #检查nginx配置文件语法
  2. nginx -s reload #重启nginx并重新加载配置文件

参考链接:
https://aotu.io/notes/2016/08/16/nginx-https/index.html
https://juejin.im/post/5c0144036fb9a04a102f046a