NginxSSL

Nginx的安装与配置

  • 前端:AngularJS
  • 后端:SpringBoot + Tomcat

前端静态资源放在Nginx服务器上,后端Tomcat置于Nginx后方,访问到Tomcat的请求由Nginx转发,全程访问使用https,访问前端地址为默认地址(如 https://192.168.28.232 ) ,访问后端地址加上/server(如 https://192.168.28.232/server )

SSL证书的生成

首先,进入你想创建证书和私钥的目录,例如:

# cd /usr/local/nginx/conf

创建服务器私钥,命令会让你输入一个口令:

# openssl genrsa -des3 -out server.key 2048

创建签名请求的证书(CSR):

# openssl req -new -key server.key -out server.csr

在加载SSL支持的Nginx并使用上述私钥时不带口令的key:

# openssl rsa -in server.key -out server_nopwd.key

最后标记证书使用上述私钥和CSR:

# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Nginx的安装

Windows平台下的Nginx安装

  1. 下载地址:
    http://nginx.org
    文件:nginx-1.9.5.zip
  2. 启动
    解压至c:\nginx,运行nginx.exe,默认使用80端口,日志见文件夹C:\nginx\logs
  3. 使用
    http://localhost
    访问成功后进入Nginx欢迎界面
  4. 关闭
    nginx.exe -s stop 强制关闭
    nginx.exe -s quit 优雅的关闭
  5. 修改配置
    修改conf目录下的nginx.conf文件,启用https服务
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    # 允许加载静态资源
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    server {
        server_name  localhost;
        # 监听443端口,启用https服务
        listen 443;
        ssl on;
        # ssl证书的位置
        ssl_certificate   C:/nginx-1.9.5/cert/server.crt;
        ssl_certificate_key  C:/nginx-1.9.5/cert/server_nopwd.key;

        ssl_session_timeout  30m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
            ssl_prefer_server_ciphers  on;

        # 加载AngularJS的build之后的文件位置 (gulp build)
        location / {
            root C:/nginx-1.9.5/apps/web-console/build;
            index index.html;
            expires 30d;
            try_files $uri $uri/ /index.html;
        }
        # 反向代理Tomcat服务器,将类似htts://localhost/server的请求转发到Tomcat上
        location /server {
           # /server只是我们定义的请求格式,需要截取/server后面的uri重组url
           if ($request_uri ~ ^/server/(.*)$ ){
                   # 每个服务器都有一个Nginx将请求转发到本地的Tomcat上
                   proxy_pass http://127.0.0.1:8080/$1;
           }
            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_redirect off;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

Linux(CentOS)下的Nginx安装

Nginx需要gcc g++开发库之类的环境:
安装make:

# yum -y install gcc automake autoconf libtool make

安装g++:

# yum install gcc gcc-c++

1.安装PCRE库
通过yum安装pcre库,也可以自己下载并make,这里通过yum快速安装:

# yum search pcre
  pcre-devel.i686 : Development files for pcre
  pcre-devel.x86_64 : Development files for pcre
  pcre-static.i686 : Static library for pcre
  pcre-static.x86_64 : Static library for pcre
  pcre-tools.x86_64 : Auxiliary utilities for pcre
  pcre.i686 : Perl-compatible regular expression library
  pcre.x86_64 : Perl-compatible regular expression library
# yum install pcre-static.x86_64

2.安装zlib库
通过yum安装zlib库:

# yum search zlib
  zlib-devel.i686 : Header files and libraries for Zlib development
  zlib-devel.x86_64 : Header files and libraries for Zlib development
  zlib-static.i686 : Static libraries for Zlib development
  zlib-static.x86_64 : Static libraries for Zlib development
  zlib.i686 : The compression and decompression library
  zlib.x86_64 : The compression and decompression library
# yum install zlib-static.x86_64

3.安装OpenSSL

# yum install openssl.x86_64

4.安装Nginx

# cd /usr/local/src
# wget http://nginx.org/download/nginx-1.4.2.tar.gz
# tar -zxvf nginx-1.4.2.tar.gz
# cd nginx-1.4.2
# ./configure --sbin-path=/usr/local/nginx/nginx --with-http_ssl_module
# make 
# make install

5.启动
启动前确保80端口没有被占用:

# netstat -ano|grep 80

运行nginx

# /usr/local/nginx/nginx

6.修改Nginx配置支持https服务

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        server_name  localhost;
        listen 443;
        ssl on;
        ssl_certificate   /usr/local/cert/server.crt;
        ssl_certificate_key   /usr/local/cert/server_nopwd.key;
        ssl_session_timeout  30m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
            ssl_prefer_server_ciphers  on;

        location / {
            root /usr/local/apps/webconsole/build;
            index index.html index.htm;
            try_files $uri $uri/ /index.html;
        }

        location /server {
           if ($request_uri ~ ^/server/(.*)$ ){
                   proxy_pass http://127.0.0.1:8080/$1;
           }
            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_redirect off;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

另外还可以加入如下代码实现80端口重定向到443:


server {
    listen 80;=
    rewrite ^(.*) https://$host$1 permanent;
    # returen效率更高
    # return 301 https://$host$request_uri;
}
<think>嗯,用户想了解如何在Nginx中配置SSL证书以及常见问题的解决方法。首先,我需要回忆一下Nginx配置SSL的基本步骤。根据之前的引用内容,安装依赖、生成私钥和CSR、获取证书、配置Nginx,然后测试和重启服务。这些步骤应该覆盖主要流程。 然后,常见问题可能包括证书路径错误、权限问题、协议版本过时、证书不匹配或者端口未开放。比如用户可能会遇到403错误,这时候需要检查证书文件的权限是否正确。还有可能配置语法错误,导致Nginx无法启动,这时候需要用nginx -t来测试配置。 另外,用户可能不知道如何生成自签名证书,或者申请CA证书的具体步骤。需要分点说明,生成私钥和CSR的命令,以及如何从CA获取证书。同时,强调配置文件中server块的设置,比如监听443端口、ssl_certificate和ssl_certificate_key的路径是否正确。 还要注意是否需要强制HTTPS跳转,这可以通过在80端口的server块中添加rewrite指令。另外,可能提到一些安全增强配置,比如启用HSTS、选择强密码套件等,但根据引用内容,可能暂时不需要深入,除非用户提到相关问题。 可能用户遇到的另一个问题是浏览器提示证书不受信任,这可能是因为自签名证书未被CA机构认可,所以建议使用受信任的CA颁发的证书。或者证书链不完整,需要配置中间证书。 测试部分,需要指导用户如何用curl或者openssl s_client检查SSL连接是否成功。还有检查防火墙是否开放了443端口,这个也是常见的问题。 最后,确保回答结构清晰,步骤明确,每个部分都分点说明,并引用提供的参考资料中的步骤,比如引用[1]提到的安装依赖,引用[3]中的生成密钥和CSR的过程,引用[2]的备份Nginx执行文件。同时,相关问题部分要引导用户进一步探索优化配置、证书续期等高级话题。</think>### 如何在Nginx中配置SSL证书及常见问题解决 #### **一、配置SSL证书步骤** 1. **安装Nginx依赖** 确保系统已安装Nginx所需依赖包(如`gcc`、`openssl`、`pcre`等)[^1]: ```bash yum install -y gcc-c++ zlib zlib-devel openssl openssl-devel pcre pcre-devel ``` 2. **生成私钥与证书签名请求(CSR)** 使用OpenSSL生成私钥(`private.key`)和CSR文件(`domain.csr`)[^3]: ```bash openssl req -newkey rsa:2048 -nodes -keyout private.key -out domain.csr ``` 根据提示填写域名、组织信息等。 3. **获取SSL证书** - **自签名证书**(仅测试用): ```bash openssl x509 -req -days 365 -in domain.csr -signkey private.key -out domain.crt ``` - **CA颁发证书**:将CSR提交至证书颁发机构(如Let’s Encrypt),获取签发的证书文件(如`domain.crt`)。 4. **配置Nginx** 编辑Nginx配置文件(如`/etc/nginx/nginx.conf`或站点配置文件): ```nginx server { listen 443 ssl; server_name example.com; ssl_certificate /path/to/domain.crt; # 证书路径 ssl_certificate_key /path/to/private.key; # 私钥路径 ssl_protocols TLSv1.2 TLSv1.3; # 推荐协议版本 ssl_ciphers HIGH:!aNULL:!MD5; # 加密套件配置 # 其他配置(如静态资源路径、反向代理等) } ``` 配置后需备份原Nginx执行文件并重新加载配置[^2]: ```bash nginx -t # 测试配置语法 systemctl reload nginx ``` 5. **强制HTTPS跳转(可选)** 在80端口的server块中添加跳转规则: ```nginx server { listen 80; server_name example.com; return 301 https://$host$request_uri; } ``` --- #### **二、常见问题及解决方法** 1. **证书路径错误** - **现象**:Nginx启动失败,日志提示`SSL: cannot load certificate`。 - **解决**:检查`ssl_certificate`和`ssl_certificate_key`路径是否正确,确保文件权限为可读(如`chmod 644 *.crt`)。 2. **SSL协议版本不兼容** - **现象**:浏览器提示“不安全的连接”。 - **解决**:禁用旧协议(如TLSv1.0),仅保留`TLSv1.2`及以上版本[^3]。 3. **证书与域名不匹配** - **现象**:浏览器警告“证书无效”。 - **解决**:确保证书中`Common Name`或`Subject Alternative Name`与域名一致。 4. **443端口未开放** - **现象**:无法通过HTTPS访问。 - **解决**:检查防火墙规则,开放443端口: ```bash firewall-cmd --add-port=443/tcp --permanent firewall-cmd --reload ``` 5. **混合HTTP/HTTPS内容** - **现象**:页面部分资源加载失败。 - **解决**:确保所有静态资源(如图片、JS)使用相对路径或`https://`协议。 --- #### **三、测试与验证** - **命令行验证**: ```bash curl -I https://example.com # 检查响应状态码 openssl s_client -connect example.com:443 # 查看证书详细信息 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值