1、http 重定向
[图片上传失败...(image-ca2188-1534050760876)]
2、一台主机,同时提供http与https两种访问方式
1. nginx.conf
- 1)域名站点最终通过https访问
- 2)http首先访问nginx后,重定向到https访问(http => nginx => https)
http
{
# 1、https 443端口:https://www.domain.com
server
{
listen 443;
ssl on;
server_name domain.com; //你的域名
index index.html index.htm index.php default.html default.htm default.php;
ssl_certificate /usr/local/nginx/cert/user.medsci-tech.com/214020580630662.pem;
ssl_certificate_key /usr/local/nginx/cert/user.medsci-tech.com/214020580630662.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
root /home/wwwroot/web/public;//项目根目录
include laravel.conf;
#error_page 404 /404.html;
include enable-php.conf;
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
}
# 2、http 80端口:http://www.domain.com, 重定向到 https 443端口
server
{
listen 80;
server_name domain.com;
## 重定向到 443 https 方式访问
rewrite ^/(.*) https://$server_name$request_uri? permanent;
}
}
- 1)nginx服务部署所在主机,直接作为【http服务器】
- 2)同时提供【80端口】与【443】端口
- 3)http重定向为https
- 4)如果是【自制ssl证书】,则需要在【app客户端】预先存放【ssl公钥证书】
- 5)如果是【权威认证机构颁发的ssl证书】,则不需要做什么处理
1. 直接使用 http
[图片上传失败...(image-199c6e-1534050760876)]
2. http 转发为 https
[图片上传失败...(image-287921-1534050760876)]
3、【nginx 转发服务】与【nginx http服务】分离
1. 逻辑流程
[图片上传失败...(image-f5f4f5-1534050760876)]
2. nginx 服务器
nginx 服务器类型 | 服务器编号 | |
---|---|---|
nginx 转发服务器 | A | 8080 |
nginx http web 服务器 | B |
3.【A主机】nginx.conf
server
{
listen 8080;
server_name domain.com;
# 1、将对localhost访问由/opt/app/lua/dep.lua进行处理
location /
{
default_type "text/html";
content_by_lua_file /opt/app/lua/dep.lua; # 指定由lua文件处理http请求
#add_after_body "$http_x_forwarded_for";
}
############################################################
# 2.1、http 协议进行转发
location @go_http
{
# 访问nginx【http】服务器的http协议时,
# => 使用 proxy_pass 转发
# => proxy_pass【不会让地址栏发生变化】
proxy_pass http://【nginx http服务器ip】:80;
}
############################################################
# 2.2、https 协议转发进行转发
location @go_https
{
# 访问nginx【https】服务器的http协议时
# => 使用 rewrite 重定向
# => rewrite 【让地址栏发生变化,重新发起https连接访问】
# => 如果是【自制ssl证书】,则需要在【app客户端】预先存放【ssl公钥证书】
# => 如果是【权威认证机构颁发的ssl证书】,则不需要做什么处理
rewrite ^/(.*) https://$server_name$request_uri? permanent;
}
error_page 500 502 503 504 404 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
4.【A主机】/opt/app/lua/dep.lua
1. lua 源文件
-- 查询memcache等数据库服务,
-- 判断ip是否包含在http或https协议访问配置中
-- 走http协议
if res == "1" then
ngx.exec("@go_http")
return
end
-- 走htts协议
ngx.exec("@go_https")
2. ngx.exec("@go_https")
location @go_https
{
rewrite ^/(.*) https://$server_name$request_uri? permanent;
}
3. ngx.exec("@go_http")
location @go_http
{
proxy_pass http://【nginx http服务器ip】:80;
}
会自动重定向为上面的https链接访问。
5.【B主机】nginx.conf
http
{
# 1. 443端口 https://www.domain.com
server
{
listen 443;
ssl on;
server_name localhost; //你的域名
index index.html index.htm index.php default.html default.htm default.php;
ssl_certificate /usr/local/nginx/cert/user.medsci-tech.com/214020580630662.pem;
ssl_certificate_key /usr/local/nginx/cert/user.medsci-tech.com/214020580630662.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
root /home/wwwroot/web/public;//项目根目录
}
# 2. 80端口 https://www.domain.com
server
{
listen 80;
server_name localhost;
root /home/wwwroot/web/public;//项目根目录
}
}
- 1)提供【80端口】的http请求处理
- 2)也提供【443端口】的http请求处理
6. rewrite 与 proxy_pass
rewrite | 重定向 | 让客户端重新发起连接,访问新的url地址,地址栏会发生变化 |
proxy_pass | 代理转发 | 直接将客户端请求塞给另外服务器处理,地址栏【不发生】变化 |
4、nginx 497 响应码
1. 核心
- 1、当网站只允许https访问时,当用http访问时nginx会报出497错误码
- 2、利用error_page命令,将497状态码的链接重定向到https域名
2. nginx.conf
server
{
listen 127.0.0.1:443; #ssl端口
listen 127.0.0.1:80; #用户习惯用http访问,加上80,后面通过497状态码让它自动跳到443端口
server_name dev.wangshibo.com;
#为一个server{......}开启ssl支持
ssl on;
#指定PEM格式的证书文件
ssl_certificate /etc/nginx/wangshibo.pem;
#指定PEM格式的私钥文件
ssl_certificate_key /etc/nginx/wangshibo.key;
#让http请求重定向到https请求
error_page 497 https://$host$uri?$args;
location ~ / {
root /var/www/html/8080;
index index.html index.php index.htm;
}
}
5、proxy_redirec
## re-write redirects to http as to https, example: /home
proxy_redirect http:// https://;
网友评论