如何为nginx配置https

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何为nginx配置https相关的知识,希望对你有一定的参考价值。

默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译时指定–with-http_ssl_module参数,安装模块依赖于OpenSSL库和一些引用文件,通常这些文件并不在同一个软件包中。通常这个文件名类似libssl-dev。
生成证书
可以通过以下步骤生成一个简单的证书:
首先,进入你想创建证书和私钥的目录,例如:
$ cd /usr/local/nginx/conf
创建服务器私钥,命令会让你输入一个口令:
$ openssl genrsa -des3 -out server.key 1024
创建签名请求的证书(CSR):
$ openssl req -new -key server.key -out server.csr
在加载SSL支持的Nginx并使用上述私钥时除去必须的口令:
$ cp server.key server.key.org
$ openssl rsa -in server.key.org -out server.key
配置nginx
最后标记证书使用上述私钥和CSR:
$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
修改Nginx配置文件,让其包含新标记的证书和私钥:
server
server_name YOUR_DOMAINNAME_HERE;
listen 443;
ssl on;
ssl_certificate /usr/local/nginx/conf/server.crt;
ssl_certificate_key /usr/local/nginx/conf/server.key;

重启nginx。
这样就可以通过以下方式访问:
https://YOUR_DOMAINNAME_HERE
另外还可以加入如下代码实现80端口重定向到443IT人乐园
server
listen 80;
server_name ww.centos.bz;
rewrite ^(.*) https://$server_name$1 permanent;
参考技术A 申请https证书
在nginx配置文件中添加一个server
server里面监听443端口,并添加ssl参数
配置证书位置,最后重启nginx即可
参考技术B Nginx安装SSL证书:https://www.gworg.com/ssl/107.html

Nginx 自动跳转到HTTPS:https://www.gworg.com/ssl/167.html本回答被提问者采纳

如何为 WebSocket 协议配置 AWS ELB 和 Nginx? [关闭]

【中文标题】如何为 WebSocket 协议配置 AWS ELB 和 Nginx? [关闭]【英文标题】:How to configure AWS ELB and Nginx for WebSocket protocol? [closed] 【发布时间】:2015-10-30 10:26:16 【问题描述】:

我在 AWS 中有 N 层架构 Web 应用程序。 HTTP 请求流顺序如下:

    Nginx-ELB(公共 ELB,Nginx 的代理) Nginx(公共子网中的 EC2 实例,监听端口 80,代理到 AP-ELBAP-ELB(内部 ELB,AP-Server 的代理) AP-Server(私有子网中的 EC2 实例,监听端口 80

我想将 WebSocket 特性应用到这个架构中。 两层ELB和Nginx后面如何配置?

【问题讨论】:

【参考方案1】:

为 ws:// 协议使用另一个端口,因为 ELB 不允许在不同的模式 (HTTP/TCP) 下监听相同的端口。例如:ws://Nginx-ELB:8081/ws-endpoint

这里分两部分解释。

Nginx 部分

在端口 80 上侦听 HTTP,然后代理到 AP-ELB 端口 80。 在端口 8081 上监听 WebSocket,然后代理到 AP-ELB 端口 8081。

关于WebSocket代理,可以参考这个configuration。

这样的配置示例:

# Web
server 
  listen       80;
  server_name  localhost;

  charset utf-8;

  error_log /var/log/nginx/lnmnt/error.log error;
  access_log off;

  set $upstream_endpoint      <ap_elb_domain_name>;

  more_set_headers  'Cache-Control: max-age=0, no-cache, no-store';
  location / 
    proxy_connect_timeout       75;
    proxy_send_timeout          300;
    proxy_read_timeout          300;
    send_timeout                300;
    proxy_set_header        Host $host;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        X-Forwarded-Host    $host;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_pass              $upstream_adm_endpoint;
  


# WebSocket
server 
  listen  8081 proxy_protocol;
  server_name localhost;
  error_log /var/log/nginx/lnmnt/websocket.error.log error;
  access_log off;
  real_ip_header proxy_protocol;

  set $upstream_ws_endpoint   <ap_elb_domain_name>:8081;

  location / 
    proxy_set_header        Host $host;
    proxy_http_version      1.1;
    proxy_set_header        Upgrade $http_upgrade;
    proxy_set_header        Connection "upgrade";
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-Proto $scheme;
    proxy_pass              $upstream_ws_endpoint;
  

ELB 部分

Nginx-ELB

按照以下步骤创建端口转发:

80 (HTTP) 转发到 80 (HTTP) 8081 (TCP) 转发到 8081 (TCP)

然后使用您的 AWS CLI 执行:

aws elb create-load-balancer-policy \
  --load-balancer-name Nginx-ELB \
  --policy-name EnableProxyProtocol \
  --policy-type-name ProxyProtocolPolicyType \
  --policy-attributes AttributeName=ProxyProtocol,AttributeValue=True

aws elb set-load-balancer-policies-for-backend-server \
  --load-balancer-name Nginx-ELB \
  --instance-port 8081 \
  --policy-names EnableProxyProtocol

AP-ELB

按照以下步骤创建端口转发:

80 (HTTP) 转发到 80 (HTTP) 8081 (TCP) 转发到 80 (TCP)

不要为此 ELB 应用任何负载均衡器策略!

这部分让我头疼了好几天。如果对两个 ELB 应用相同的策略,你永远不会得到正确的结果。

现在,使用 AWS ELB 和 Nginx 享受您的 WebSocket。

【讨论】:

感谢您发布此信息。您能否提供一个示例 nginx 配置? AWS几天前发布了Application Load Balancer,直接支持WebSocket功能。可以参考这篇文章:aws.amazon.com/tw/blogs/aws/new-aws-application-load-balancer配置会更方便。 不幸的是,Application Load Balancer 不能与 Elastic Beanstalk 一起使用。我询问了 AWS 支持,但他们无法提供支持的日期。 Nginx 配置示例更新。希望它有所帮助:)

以上是关于如何为nginx配置https的主要内容,如果未能解决你的问题,请参考以下文章

如何为无 ALPN 客户端配置 Nginx 仅支持 HTTP2

如何为nginx配置https

如何为 NGINX 负载均衡器设置例外

Nginx Https 配置

如何为 Elastic Load Balancer 配置自动超时?

如何为 django 使用 nginx 虚拟服务器 + fcgi?