论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
主机系统
›
linux
›
OPENWRT 使用nginx作为web服务器
OPENWRT 使用nginx作为web服务器
嚴華
金牌会员
|
2024-8-21 16:46:16
|
显示全部楼层
|
阅读模式
楼主
主题
673
|
帖子
673
|
积分
2019
OPENWRT 使用nginx作为web服务器
在op上各人使用nginx作为web服务器,主要是为了其强盛的反向代理功能,但op上的nginx官方做了肯定的修改,设置上稍显复杂,几篇文章也是比较老的,设置也是一头雾水,作业都不好抄,索性自己查了资料学了些nginx的内容,实现了如下的功能:
####默认你已经完成 域名申请,设置DDNS 和 申请ssl证书的操作。
修改UCI控件
OP把uci设置加于nginx的设置之上,所以第一步先关闭uci的设置管理。
着实第三篇参考文章(官方文档)已经讲的很清楚了,如果你必要简单的管理nginx,用uci就够了,必要自己设置nginx的就关闭uci管理。
那固然是关闭啦:
第一种优雅的方式,登录背景命令行输入:
uci set nginx.global.uci_enable=false
uci commit nginx
这两步关闭了uci的设置接管
第二种直接的方式,修改/etc/config/nginx:
config main 'global'
#把这里的true修改为false就行了
option uci_enable 'false'
config server '_lan'
option server_name '_lan'
list include 'restrict_locally'
list include 'conf.d/*.locations'
option uci_manage_ssl 'self-signed'
option ssl_certificate '/etc/nginx/conf.d/_lan.crt'
option ssl_certificate_key '/etc/nginx/conf.d/_lan.key'
option ssl_session_cache 'shared:SSL:32k'
option ssl_session_timeout '64m'
option access_log 'off; # logd openwrt'
config server '_redirect2ssl'
list listen '80'
list listen '[::]:80'
option server_name '_redirect2ssl'
option return '302 https://$host$request_uri'
复制代码
修改之后,重启后nginx也不再受到uci的管理了,着实到这里剩下的设置就和常规nginx一样了。
排除内网访问http重定向到https的题目
修改/etc/nginx/nginx.conf这个设置文件:
那我这里就贴出具体修改的代码块
server { #see uci show 'nginx._lan'
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name _lan;
include restrict_locally;
include conf.d/*.locations;
ssl_certificate /etc/nginx/conf.d/_lan.crt;
ssl_certificate_key /etc/nginx/conf.d/_lan.key;
ssl_session_cache shared:SSL:32k;
ssl_session_timeout 64m;
access_log off; # logd openwrt;
}
server { #see uci show 'nginx._redirect2ssl'
listen 80;
listen [::]:80;
server_name _redirect2ssl;
return 302 https://$host$request_uri;
}
复制代码
修改为:
server { #see uci show 'nginx._lan'
listen 80;
listen [::]:80;
server_name _lan;
include restrict_locally;
include conf.d/*.locations;
access_log off; # logd openwrt;
}
复制代码
这里表明一下,好多文章是留下了 _redirect2ssl这个捏造服务器设置,这里保留哪个捏造服务器并不影响使用,只是/etc/nginx/目录下有个lan的设置,凭感觉来的。
这个就是本地web端,即OP的管理页面:
include conf.d/*.locations;
复制代码
这个是局域网保留网段的过滤,使得只能内网ip才能访问op的管理页面:
include restrict_locally;
复制代码
加上国内三大运营商默认ban了80端口443端口等一系列常见端口,着实某种意义上讲非常安全。
修改好设置后,命令行输入:
nginx -t
检查一下设置是否存在低级的语法错误。
在输入重载重启nginx命令:
service nginx reload
service nginx restart
至此内网通过ip访问就不会再强制https访问了
添加SSL证书
网上教你怎么申请ssl证书的非常多,如今好多是通过acme.sh脚本自动申请,别的就是通过域名提供商申请免费的ssl证书,
这里就不再赘述了,自行搜刮。
nginx添加ssl证书就是声明一下ssl_certificate和ssl_certificate_key两个值就行了,这里提供一种全局添加的方式。
修改/etc/nginx/nginx.conf这个设置文件:
gzip_proxied any;
root /www;
#####将以下内容添加到配置文件中#####
# Mozilla Intermediate configuration
ssl_protocols TLSv1.2 TLSv1.3;
#以下协议需要确认硬件是否支持,如果不支持或者不确定可以直接去除
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
#以下修改为自己申请的域名公钥和私钥文件地址
ssl_certificate /etc/nginx/conf.d/example.com.crt;
ssl_certificate_key /etc/nginx/conf.d/example.com.key;
#以上修改为自己申请的域名公钥和私钥文件地址
ssl_session_cache shared:SSL:32k;
ssl_session_timeout 64m;
#####将以上内容添加到配置文件中#####
server { #see uci show 'nginx._lan'
复制代码
添加好后重载并重启nginx服务。
修改好后就有个全局的ssl证书声明,如果你有多个域名必要反向代理,那就必要为每个不同域名对应的服务器设置对应的ssl证书了。
添加反向代理
一样寻常来说,必要外网的服务,直接做一个端口转发到内网指定ip的指定端口就行了:
但是使用nginx反向代理的话,外网数据首先要转发到op端的指定端口再由op上的nginx转发给局域网ip
所以记得在op->防火墙->端口转发中将对应端口转发到op的本地端口:
我这里按照nginx的风俗做法,在/etc/nginx/conf.d目录下创建了一个example.com.conf的设置文件:
server {
#一般加ssl后缀就可以了,我这里添加了对http2协议的要求。
listen 9080 ssl http2;
listen [::]:9080 ssl http2;
#修改为自己申请的域名
server_name example.com;
location / {
#修改为自己需要代理的局域网ip和端口号
proxy_pass http://localserver:9080;
proxy_set_header Host $host;
#以下配置文件是参考配置网站生成的配置不添加也没问题
include nginxconfig.io/proxy.conf;
}
access_log on; # logd openwrt;
# location / { ... } # root location for this server.
}
复制代码
添加好后测试设置是否存在语法题目,重载并重启nginx服务,如果发现通过域名访问失败时,先不要慌。
1.在内网通过nginx所在服务器加设置的端标语访问一下,确认内网服务是否正常
2.确认域名动态解析是否生效精确
3.以上都不是,那可能你开放的端口被运营商ban了,换个端口吧
这里贴出/etc/nginx/nginxconfig.io/proxy.conf的设置内容
proxy_http_version 1.1;
proxy_cache_bypass $http_upgrade;
# Proxy SSL
proxy_ssl_server_name on;
# Proxy headers
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
# Proxy timeouts
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
复制代码
这些改动都是参考NGINX设置生成网站的demo修改的,自行斟酌添加:NGINX 设置设置高性能、安全、稳固的NGINX服务器的最简单方法.
添加外网访问http自动转为https
到这里着实已经可以正常访问了,但是如果你用http去访问一个强制https访问的端口就会出现nginx的400报错,意思你该用https访问。
这里你自然可以参考内网http强制转https的写法,但我记得我测试有点题目,我这里贴出一个最近找到的对于域名访问全部重定向为https的方法,固然你也可以修改端口为指定端口:
server {
listen example.com;
server_name example.com;
rewrite ^/(.*)$ https://$host$1 permanent;
}
复制代码
主要参考文章
K3终极折腾记<三> --通过ipv6域名长途访问openwrt、https证书安装设置.
OpenWrt 上设置 nginx HTTP 不重定向到 HTTPS 以正常使用 OpenClash yacd 面板.
Nginx webserver.
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
嚴華
金牌会员
这个人很懒什么都没写!
楼主热帖
Qt-FFmpeg开发-打开本地摄像头(6) ...
用uniapp实现微信小程序的电子签名效果 ...
【云服务器】推荐阿贝云服务器,目前永 ...
Doris(一) -- 简介和安装
Spring Boot 配置文件
【万能皆可链接】C++中的动态链接库编 ...
微服务介绍
Java代码读取properties配置文件 ...
MySQL实战45讲 20
使用PostgreSQL而不是MySQL存储中型数 ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表