OPENWRT 使用nginx作为web服务器

嚴華  金牌会员 | 2024-8-21 16:46:16 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 548|帖子 548|积分 1644

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:
  1. config main 'global'
  2.         #把这里的true修改为false就行了
  3.         option uci_enable 'false'
  4. config server '_lan'
  5.         option server_name '_lan'
  6.         list include 'restrict_locally'
  7.         list include 'conf.d/*.locations'
  8.         option uci_manage_ssl 'self-signed'
  9.         option ssl_certificate '/etc/nginx/conf.d/_lan.crt'
  10.         option ssl_certificate_key '/etc/nginx/conf.d/_lan.key'
  11.         option ssl_session_cache 'shared:SSL:32k'
  12.         option ssl_session_timeout '64m'
  13.         option access_log 'off; # logd openwrt'
  14. config server '_redirect2ssl'
  15.         list listen '80'
  16.         list listen '[::]:80'
  17.         option server_name '_redirect2ssl'
  18.         option return '302 https://$host$request_uri'
复制代码
修改之后,重启后nginx也不再受到uci的管理了,着实到这里剩下的设置就和常规nginx一样了。
排除内网访问http重定向到https的题目

修改/etc/nginx/nginx.conf这个设置文件:
那我这里就贴出具体修改的代码块
  1.         server { #see uci show 'nginx._lan'
  2.                 listen 443 ssl default_server;
  3.                 listen [::]:443 ssl default_server;
  4.                 server_name _lan;
  5.                 include restrict_locally;
  6.                 include conf.d/*.locations;
  7.                 ssl_certificate /etc/nginx/conf.d/_lan.crt;
  8.                 ssl_certificate_key /etc/nginx/conf.d/_lan.key;
  9.                 ssl_session_cache shared:SSL:32k;
  10.                 ssl_session_timeout 64m;
  11.                 access_log off; # logd openwrt;
  12.         }
  13.         server { #see uci show 'nginx._redirect2ssl'
  14.                 listen 80;
  15.                 listen [::]:80;
  16.                 server_name _redirect2ssl;
  17.                 return 302 https://$host$request_uri;
  18.         }
复制代码
修改为:
  1.    server { #see uci show 'nginx._lan'
  2.            listen 80;
  3.            listen [::]:80;
  4.            server_name _lan;
  5.            include restrict_locally;
  6.            include conf.d/*.locations;
  7.            access_log off; # logd openwrt;
  8.    }
复制代码
这里表明一下,好多文章是留下了 _redirect2ssl这个捏造服务器设置,这里保留哪个捏造服务器并不影响使用,只是/etc/nginx/目录下有个lan的设置,凭感觉来的。
这个就是本地web端,即OP的管理页面:
  1.            include conf.d/*.locations;
复制代码
这个是局域网保留网段的过滤,使得只能内网ip才能访问op的管理页面:
  1.            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这个设置文件:
  1.    gzip_proxied any;
  2.    
  3.    root /www;
  4.    
  5.    #####将以下内容添加到配置文件中#####
  6.    
  7.    # Mozilla Intermediate configuration
  8.    ssl_protocols          TLSv1.2 TLSv1.3;
  9.    #以下协议需要确认硬件是否支持,如果不支持或者不确定可以直接去除
  10.    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;
  11.    
  12.    #以下修改为自己申请的域名公钥和私钥文件地址
  13.    ssl_certificate /etc/nginx/conf.d/example.com.crt;
  14.    ssl_certificate_key /etc/nginx/conf.d/example.com.key;
  15.    #以上修改为自己申请的域名公钥和私钥文件地址
  16.    ssl_session_cache shared:SSL:32k;
  17.    ssl_session_timeout 64m;
  18.    
  19.    #####将以上内容添加到配置文件中#####
  20.    
  21.    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的设置文件:
  1. server {
  2.    #一般加ssl后缀就可以了,我这里添加了对http2协议的要求。
  3.    listen 9080 ssl http2;
  4.    listen [::]:9080 ssl http2;
  5.    #修改为自己申请的域名
  6.    server_name example.com;
  7.    location / {
  8.            #修改为自己需要代理的局域网ip和端口号
  9.            proxy_pass http://localserver:9080;
  10.            proxy_set_header Host $host;
  11.            #以下配置文件是参考配置网站生成的配置不添加也没问题
  12.            include nginxconfig.io/proxy.conf;
  13.    }
  14.    access_log on; # logd openwrt;
  15.    # location / { ... } # root location for this server.
  16. }
复制代码
添加好后测试设置是否存在语法题目,重载并重启nginx服务,如果发现通过域名访问失败时,先不要慌。
1.在内网通过nginx所在服务器加设置的端标语访问一下,确认内网服务是否正常
2.确认域名动态解析是否生效精确
3.以上都不是,那可能你开放的端口被运营商ban了,换个端口吧
这里贴出/etc/nginx/nginxconfig.io/proxy.conf的设置内容
  1. proxy_http_version                 1.1;
  2. proxy_cache_bypass                 $http_upgrade;
  3. # Proxy SSL
  4. proxy_ssl_server_name              on;
  5. # Proxy headers
  6. proxy_set_header Upgrade           $http_upgrade;
  7. proxy_set_header X-Real-IP         $remote_addr;
  8. proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
  9. proxy_set_header X-Forwarded-Proto $scheme;
  10. proxy_set_header X-Forwarded-Host  $host;
  11. proxy_set_header X-Forwarded-Port  $server_port;
  12. # Proxy timeouts
  13. proxy_connect_timeout              60s;
  14. proxy_send_timeout                 60s;
  15. proxy_read_timeout                 60s;
复制代码
这些改动都是参考NGINX设置生成网站的demo修改的,自行斟酌添加:NGINX 设置设置高性能、安全、稳固的NGINX服务器的最简单方法.
添加外网访问http自动转为https

到这里着实已经可以正常访问了,但是如果你用http去访问一个强制https访问的端口就会出现nginx的400报错,意思你该用https访问。
这里你自然可以参考内网http强制转https的写法,但我记得我测试有点题目,我这里贴出一个最近找到的对于域名访问全部重定向为https的方法,固然你也可以修改端口为指定端口:
  1. server {                                                                                               
  2.    listen example.com;                                                                     
  3.    server_name example.com;                                                                 
  4.    rewrite ^/(.*)$ https://$host$1 permanent;                                                     
  5. }
复制代码
主要参考文章

K3终极折腾记<三> --通过ipv6域名长途访问openwrt、https证书安装设置.
OpenWrt 上设置 nginx HTTP 不重定向到 HTTPS 以正常使用 OpenClash yacd 面板.
Nginx webserver.

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

嚴華

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表