ToB企服应用市场:ToB评测及商务社交产业平台

标题: 前后端都用得上的 Nginx 日常使用经验 [打印本页]

作者: 我可以不吃啊    时间: 2023-12-2 03:24
标题: 前后端都用得上的 Nginx 日常使用经验
前言

nginx 是一个高性能的开源反向代理服务器和 web 服务器,一般用来搭建静态资源服务器、负载均衡器、反向代理,本文将分享其在 Windows/docker 中的使用,使用 nssm 部署成服务的方案脚本,局域网中自定义域名解决https提示不安全的解决方案,以及一路踩过的坑。
特点

使用情况

实践

准备

Windows 安装使用 nginx

安装运行

域名配置

SSL 证书申请

为了给网站加把锁(数据传输的私密性),一般个人项目用免费的就行,不过有限制,比如通配符、有效期、安全性等,企业一般会使用付费证书,自行购买即可,一般云商也会提供免费证书,其他免费的目前使用过的就下面两种
如果本地也需要使用 https 的话,也可以通过 nginx 来配置证书,为应用加把锁。服务器的证书配置使用上面两种生成,参考下面配置即可
nginx 本地配置 https

  1. #依次执行,输入信息,我这里都输入了 ym
  2. openssl genrsa -out server.key 1024
  3. openssl req -new -key server.key -out server.csr
  4. openssl genrsa -out ca.key 1024
  5. openssl req -new -key ca.key -out ca.csr
  6. openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt
  7. openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt
复制代码

  1. winpty openssl genrsa -out nginx.devops.test.com.key 2048
  2. winpty openssl req -new -key nginx.devops.test.com.key -out nginx.devops.test.com.csr
复制代码
使用 nssm 创建 nginx 服务

常用命令

使用 Docker Compose 安装 nginx

本篇文章基于 Docker V24 及 Docker Compose V2,安装可以参考之前的文章
配置说明

配置文件 compose.yml

  1. version: '3.1'
  2. services:
  3.   nginx:
  4.     image: nginx:1.24.0
  5.     container_name: nginx_1_24
  6.     restart: always
  7.     environment:
  8.       TZ : 'Asia/Shanghai'
  9.     ports:
  10.       - "80:80"
  11.       - "443:443"
  12.     volumes:
  13.       - ./config/nginx.conf:/etc/nginx/nginx.conf
  14.       - ./config/conf.d:/etc/nginx/conf.d
  15.       - ./html:/usr/share/nginx/html
  16.       - ./logs:/var/log/nginx
  17.       - ./ssl:/ssl
  18.       
  19.     networks:
  20.       - devopsnetwork
  21. networks:
  22.   devopsnetwork:
  23.     external: true
复制代码
默认的 nginx.conf v1.24
  1. user  nginx;
  2. worker_processes  auto;
  3. error_log  /var/log/nginx/error.log notice;
  4. pid        /var/run/nginx.pid;
  5. events {
  6.     worker_connections  1024;
  7. }
  8. http {
  9.     include       /etc/nginx/mime.types;
  10.     default_type  application/octet-stream;
  11.     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  12.                       '$status $body_bytes_sent "$http_referer" '
  13.                       '"$http_user_agent" "$http_x_forwarded_for"';
  14.     access_log  /var/log/nginx/access.log  main;
  15.     sendfile        on;
  16.     #tcp_nopush     on;
  17.     keepalive_timeout  65;
  18.     #gzip  on;
  19.     include /etc/nginx/conf.d/*.conf;
  20. }
复制代码
自定义配置 conf.d/default.conf

将前文 Windows 的配置部分修改到 default.conf 如下所示
  1. server {
  2.   listen       80;
  3.   listen       443 ssl;
  4.   server_name  nginx.devops.test.com;
  5.   ssl_certificate      /ssl/nginx.devops.test.com.crt;
  6.   ssl_certificate_key  /ssl/nginx.devops.test.com.key;
  7.   ssl_session_cache    shared:SSL:1m;
  8.   ssl_session_timeout  5m;
  9.   ssl_ciphers  HIGH:!aNULL:!MD5;
  10.   ssl_prefer_server_ciphers  on;
  11.   location / {
  12.       add_header Content-Type text/plain;
  13.       return 200 'nginx.devops.test.com 001';
  14.   }
  15. }
复制代码
创建证书 ssl 目录

上传生成的 ssl 证书或者在 linux 中使用上面 openssl 的方式重新生成域名证书,然后本地添加 pem 证书,即可使用 https
Nginx 的应用

本地使用域名前的配置

要想在局域网使用自定义的域名访问应用,需要先配置 hosts 文件,这里使用 hosts 将域名请求指向目标服务器 192.168.123.214
  1. 192.168.123.214 apollo.devops.test.com
  2. 192.168.123.214 rabbitmq.devops.test.com
复制代码
还可以搭建一个 dns 服务,设置本机的 dns,即可将域名请求交友 dns 解析到对应服务,并且能够实现泛解析
Apollo 的转发配置

RabbitMQ 的转发配置

相关脚本汇总

<ul>脚本本地目录预览,添加了系统判断 linux,执行需要给要执行的脚本添加执行权限:chmod +x ./01.build-pem.sh

nginx-start.bat :删除 nginx 进程并启动 nginx 服务
  1. @echo off
  2. cd  /d %~dp0
  3. echo kill nginx
  4. taskkill /fi "imagename eq nginx.EXE" /f
  5. echo start nginx
  6. start nginx
  7. echo start nginx success
  8. pause
  9. ```
复制代码
nginx-nssm-service.bat 创建 nginx 服务脚本
  1. @echo off
  2. cd  /d %~dp0
  3. nssm stop Nginx-service
  4. nssm remove Nginx-service confirm
  5. nssm install Nginx-service D:\Software\nginx-1.24.0\start.bat
  6. sc start Nginx-service
  7. pause
  8. ```
复制代码
01.build-pem.sh 创建自签证书
  1. #!/bin/sh
  2. # 生成根证书,访问客户端需要安装导入 myCA.pem,根据myCA.key,myCA.pem再生成nginx需要的证书
  3. if uname | grep -q "MINGW"; then
  4.    winpty openssl genrsa -out myCA.key 2048
  5.    winpty openssl req -x509 -new -nodes -key myCA.key -days 1825 -out myCA.pem
  6. else
  7.    openssl genrsa -out myCA.key 2048
  8.    openssl req -x509 -new -nodes -key myCA.key -days 1825 -out myCA.pem
  9. fi
  10. ```
复制代码
02.build-ssl.sh 创建域名证书
[code] #!/bin/bash if [ "$#" -ne 1 ]; then   echo "Usage: Must supply a domain"   exit 1 fi DOMAIN=$1 mkdir $DOMAIN #!/bin/sh if uname | grep -q "MINGW"; then   winpty openssl genrsa -out $DOMAIN/server.key 2048   winpty openssl req -new -key $DOMAIN/server.key -out $DOMAIN/server.csr else   openssl genrsa -out $DOMAIN/server.key 2048   openssl req -new -key $DOMAIN/server.key -out $DOMAIN/server.csr fi cat >$DOMAIN/server.ext




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4