配置https首先要有ssl证书,这个证书目前阿里有免费的,但如果自己做实验,也是可以自签证书,只不过不受信

openssl genrsa -des3 -out server.key 1024             ##创建服务器私钥

openssl req -new -key server.key -out server.csr     ##创建签名请求的证书

cp server.key server.key.org             ##复制一份

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

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

此时你的目录会有 server.key  server.crt 两个文件。之后,配置nginx

server {

listen 80 ;                    ##这一步 是为了后面的http转换https ,如果不需要 可以不写。

listen 443;
server_name www.c.com;

if ($scheme = http) {                                      ##这一步是为了把http的请求重定向为https,如果不需要 可以不写
return 301 https://$host$request_uri;
}

charset utf-8;
ssl on;
ssl_certificate /usr/local/nginx/server.crt;       ##生成的crt文件
ssl_certificate_key /usr/local/nginx/server.key;  ## 生成的key文件
ssl_session_timeout 5m;                            ##session超时时间
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;   ## 这个和底下的都是官网给的默认的照着写就行
ssl_ciphers HIGH:!aNULL:!MD5;
root /local/nginx/;

access_log /local/nginx/logs/PosWeb/https_access.log main;

include /etc/nginx/default.d/*.conf;

include /etc/nginx/utils/honeyjar/keywords.conf;

location / {

proxy_set_header X-FORWARDED-PROTO https;
proxy_set_header Host ;
proxy_set_header X-Real-IP ;
proxy_set_header X-Forwarded-For ;
proxy_pass https://upstream;
}

然后基本OK。自己去网上找个受信的证书。基本就可以用来了

如何处理一个请求

首先看一个nginx部分的配置文件:

upstream PosWeb {
server pos-web01:8081;
server pos-web02:8081;
}
server {
listen 80;
server_name
www.a.com
www.b.com;
charset utf-8;
root /local/nginx/;

access_log /local/nginx/logs/PosWeb/access.log main;
include /etc/nginx/utils/honeyjar/keywords.conf;

location / {
proxy_set_header Host ;
proxy_set_header X-Real-IP ;
proxy_set_header X-Forwarded-For ;
proxy_pass http://PosWeb;
}

}
upstream PosWeb_https {
server pos-web01:9143;
server pos-web02:9143;
}
server {
listen 443;
server_name www.c.com;
charset utf-8;
ssl on;
ssl_certificate /usr/local/nginx/ssl/fcwangpu.crt;
ssl_certificate_key /usr/local/nginx/ssl/fcwangpu.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
root /local/nginx/;

access_log /local/nginx/logs/PosWeb/https_access.log main;

include /etc/nginx/default.d/*.conf;

include /etc/nginx/utils/honeyjar/keywords.conf;

location / {

proxy_set_header X-FORWARDED-PROTO https;
proxy_set_header Host ;
proxy_set_header X-Real-IP ;
proxy_set_header X-Forwarded-For ;
proxy_pass https://PosWeb_https;
}

}

}

以上配置,一个443端口的https  一个是80端口的http

但是有个问题,比如我访问https://www.a.com 是可以访问的。

疑惑是我并没有给www.a.com这个域名配置https,为什么https可以访问www.a.com

后来去官网nginx.org查看

nginx请求是这样,在官网原文是这样写的

In this configuration nginx tests only the request’s header field “Host” to determine which server the request should be routed to. If its value does not match any server name, or the request does not contain this header field at all, then nginx will route the request to the default server for this port. In the configuration above, the default server is the first one — which is nginx’s standard default behaviour. It can also be set explicitly which server should be default, with the default_server parameter in the listen directive

以上意思翻译过来是说,请求会根据你的host进行匹配,如果找到匹配项,就去匹配的项目上请求。如果没有找到匹配项,就会去这个端口默认的服务请求,也就是默认的serve_name,默认的server_name 怎么判定,默认的是写在这个端口上的第一个server,就默认为他是默认服务。

看一个配置文件

server{

listen 80;

server_name  bbb.org www.bbb.org;

}

server{

listen 80;

server_name aaa.org www.aaa.org;

}

以上配置,默认 bbb.org 为默认的配置,也就是说,我用http请求 ,对这台服务器,请求了一个www.ccc.com  但是80端口并没有这个server_name ,那么这个请求就

会自动跑到第一个上面,也就是说请求会到bbb.org上。

(以下也是nginx.org 官网的原话  这个意思和上面的差不太多,感兴趣自己翻译一下)

The default_server parameter, if present, will cause the server to become the default server for the specified address:port pair. If none of the directives have the default_server parameter then the first server with the address:port pair will be the default server for this pair

那么,如何配置我们的aaa.org为默认端口,以下配置就可以

server{

listen 80;

server_name  bbb.org www.bbb.org;

}

server{

listen 80 default_server;

server_name aaa.org www.aaa.org;

}

这样,如果我去请求 www.ccc.com  请求找不到,就会自动去aaa.org上面去请求。

nginx是如何处理一个请求的(包含https配置)的更多相关文章

  1. Nginx是如何处理一个请求

    首先,nginx在启动时,会解析配置文件,得到需要监听的端口与ip地址,然后在nginx的master进程里面,先初始化好这个监控的socket(创建socket,设置addrreuse等选项,绑定到 ...

  2. Nginx如何处理一个请求

    看了下nginx的官方文档,其中nginx如何处理一个请求讲解的很好,现在贴出来分享下.Nginx首先选定由哪一个虚拟主机来处理请求.让我们从一个简单的配置(其中全部3个虚拟主机都在端口*:80上监听 ...

  3. [转载]Nginx如何处理一个请求

    http://nginx.org/cn/docs/http/request_processing.html 对我的扫盲文章 基于名字的虚拟主机 Nginx首先选定由哪一个虚拟主机来处理请求.让我们从一 ...

  4. nginx学习笔记(7)Nginx如何处理一个请求---转载

    如何防止处理未定义主机名的请求基于域名和IP混合的虚拟主机一个简单PHP站点配置 基于名字的虚拟主机 Nginx首先选定由哪一个虚拟主机来处理请求.让我们从一个简单的配置(其中全部3个虚拟主机都在端口 ...

  5. Nginx 如何处理一个请求

    基于名字的虚拟主机 Nginx首先选定由哪一个虚拟主机来处理请求.让我们从一个简单的配置(其中全部3个虚拟主机都在端口*:80上监听)开始: server { listen 80; server_na ...

  6. Django 路由 —— Djangon如何处理一个请求

    Django URL路由概述 一个干净优雅的URL方案是高质量Web应用程序中的一个重要细则Django可以让你设计URL,无论你想要什么,没有框剪限制要为应用程序设计URL,您可以非正式地创建一个名 ...

  7. nginx 监听一个端口同时支持https和http

    nginx 如何想同时支持https和http,必须监听两个不同的端口,比如http:listen 80; https:listen 443;   server { listen 1234 ssl;s ...

  8. Nginx系列篇三:linux中Nginx+keepalived做一个高可用的主从配置

    建议:先阅读搭建Nginx负载均衡之后再看此篇 备注: Nginx+keepalived的高可用有两种方式 一.主从配置 二.双主热备配置[下一篇] 准备: 标配四台服务器 Master:192.16 ...

  9. 循序渐进nginx(三):日志管理、http限流、https配置,http_rewrite模块,第三方模块安装,结语

    目录 日志管理 access_log error_log 日志文件切割 自定义错误页 http访问限流 限制请求数 语法 使用 限制连接数 语法 测试 补充: https配置 使用 生成证书 配置ng ...

随机推荐

  1. Hibernate连接池设置

    在公司第一次做项目放到服务器上测试,发现每隔一段时间不用数据库就连接不上了(以前学过连接池,很久没用就忘了),在myeclipse上的时候没发现,网上搜索才发现是hibernate连接池配置问题. 1 ...

  2. plus.os.name 无法正确执行的问题

    使用HTML5+开发App的时候, 如果碰到正确的代码却无法出现预期的执行效果, 请检查模块权限配置是否OK? 比如plus.os.name, 需要Device权限 ;

  3. Linux就该这么学--Shell脚本条件语句(一)

    1.条件测试语句能够让Shell脚本根据实际工作灵活调整工作内容,例如判断系统的状态后执行指定的工作,或创建指定数量的用户,批量修改用户密码,这些都可以让Shell脚本通过条件测试语句完成. if条件 ...

  4. Node.js学习笔记(1):Node.js快速开始

    Node.js学习笔记(1):Node.js快速开始 Node.js的安装 下载 官方网址:https://nodejs.org/en/ 说明: 在Windows上安装时务必选择全部组件,包括勾选Ad ...

  5. Machine Learning No.8: Clusting

    1. K-means algorithm 2. K-means optimization objective 3. Random initialization

  6. CSS3定时提示动画特效

    在线演示 本地下载

  7. 初学OpenMP

    这两天在看多核计算的书,就要用到openmp,因为我使用vs2015,从微软可以看到是支持openmp2.0版本的 具体使用: 在vs里创造一个控制台项目,然后打开属性管理器,在属性管理器里找到配置属 ...

  8. 去js校验

    1.首先,找到项目所在的路径 2.关掉eclipse,找到项目文件 3.打开.project

  9. Lua调用C,C++函数案例

    该程序主要是C++与Lua之间的相互调用示例.执行内容:(1)新建一个lua_State(2)打开常用库,如io,os,table,string等(3)注册C函数(4)导入程序所在目录下所有*.lua ...

  10. 揭秘FaceBook Puma演变及发展——FaceBook公司的实时数据分析平台是建立在Hadoop 和Hive的基础之上,这个根能立稳吗?hive又是sql的Map reduce任务拆分,底层还是依赖hbase和hdfs存储

    在12月2日下午的“大数据技术与应用”分论坛的第一场演讲中,来自全球知名互联网公司——FaceBook公司的软件工程师.研发经理邵铮就带来了一颗重磅炸弹,他将为我们讲解FaceBook公司的实时数据处 ...