https请求 nginx 不生效_nginx是如何处理一个请求的(包含https配置)

本文介绍了如何配置Nginx以支持HTTPS,包括自签证书的生成步骤和Nginx配置文件的详细解释。同时,文章探讨了Nginx如何根据请求的Host头字段路由请求,并解释了默认服务器的设定方法。
摘要由CSDN通过智能技术生成

配置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上面去请求。

在 Windows 服务器上配置 Nginx 进行 HTTPS 请求时,您需要修改 Nginx配置文件。以下是一个示例的 Nginx 配置文件: ```nginx http { ... server { listen 80; server_name your_domain.com; location / { proxy_pass http://localhost:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } server { listen 443 ssl; server_name your_domain.com; ssl_certificate path/to/your_certificate.crt; ssl_certificate_key path/to/your_private_key.key; location / { proxy_pass http://localhost:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ... } ``` 请按照以下步骤进行操作: 1. 打开 Nginx配置文件,通常在 `C:\nginx\conf\nginx.conf`。 2. 在 `http` 块中添加服务器块来监听 80 端口,并将请求转发到您的应用程序(假设是运行在 localhost:8000)。 3. 在同一个 `http` 块中添加另一个服务器块来监听 443 端口,并启用 SSL。将 `ssl_certificate` 和 `ssl_certificate_key` 的路径指定为您的 SSL 证书和私钥文件的位置。 4. 在此服务器块中,将请求转发到您的应用程序。 5. 保存并关闭配置文件。 确保您已经将 `your_domain.com` 替换为您的域名,并将 `path/to/your_certificate.crt` 和 `path/to/your_private_key.key` 替换为您的 SSL 证书和私钥文件的实际路径。 保存并关闭配置文件后,重新启动 Nginx 以使更改生效。您可以打开命令提示符,切换到 Nginx 的安装目录(例如 `C:\nginx`),然后执行命令 `start nginx` 来启动 Nginx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值