找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 6980|回复: 16

使用Nginx代替Openwrt中的uhttpd,并支持php

[复制链接]
发表于 2023-3-8 10:24 | 显示全部楼层 |阅读模式
本人博客:使用Nginx代替Openwrt中的uhttpd,并支持php
在之前介绍过Openwrt部署typecho博客:Openert部署typecho博客,用的是默认的uhttpd,挺方便小巧;但是也有不足,就是性能很差,兼容性也不好,于是就萌生了使用Nginx代替uhttpd的想法。
于是需求就很明确了:
1.用Nginx实现Openwrt原本的uci界面
2.用Nginx实现Openwrt实现Typecho的php页面
现在Nginx已经集成在opkg源了,可以直接安装,安装之前先将uhttpd停用一下
  1. /etc/init.d/uhttpd stop && /etc/init.d/uhttpd disable
复制代码
也将之前uhttpd使用的php8-fastcgi停用一下
  1. /etc/init.d/php8-fastcgi stop && /etc/init.d/php8-fastcgi disable
  2. #并将/etc/config/php8-fastcgi里面的option enabled 1改成option enabled 0
复制代码
停用完之后,安装Nginx涉及的包,如下:
  1. uwsgi
  2. uwsgi-syslog-plugin
  3. uwsgi-cgi-plugin
  4. uwsgi-luci-support
  5. nginx-util
  6. nginx-ssl-util
  7. nginx-ssl
  8. nginx
  9. nginx-mod-luci
  10. libopenssl-conf
  11. openssl-util
  12. nginx-mod-luci-ssl
  13. luci-ssl-nginx
  14. php8-fastcgi
  15. php8-fpm
复制代码
由于Nginx默认是不支持uci的,所以需要用uwsgi作为转发
装好之后,直接就可以访问Openwrt的uci界面了,接着就是折腾php这一块
1.先修改/etc/php8-fpm.d/www.conf,将chdir = / 改成 chdir = /www (注意/www是Typecho目录,这个看实际情况)
2.建立/etc/nginx/fastcgi_params文件,并放入以下内容
  1. fastcgi_param  QUERY_STRING       $query_string;
  2. fastcgi_param  REQUEST_METHOD     $request_method;
  3. fastcgi_param  CONTENT_TYPE       $content_type;
  4. fastcgi_param  CONTENT_LENGTH     $content_length;

  5. fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
  6. fastcgi_param  REQUEST_URI        $request_uri;
  7. fastcgi_param  DOCUMENT_URI       $document_uri;
  8. fastcgi_param  DOCUMENT_ROOT      $document_root;
  9. fastcgi_param  SERVER_PROTOCOL    $server_protocol;
  10. fastcgi_param  HTTPS              $https if_not_empty;
  11. fastcgi_param  REQUEST_SCHEME     $scheme;
  12. fastcgi_param  PATH_INFO          $fastcgi_path_info;
  13. fastcgi_param  PATH_TRANSLATED    $document_root$fastcgi_path_info;
  14. fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

  15. fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
  16. fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

  17. fastcgi_param  REMOTE_ADDR        $remote_addr;
  18. fastcgi_param  REMOTE_PORT        $remote_port;
  19. fastcgi_param  SERVER_ADDR        $server_addr;
  20. fastcgi_param  SERVER_PORT        $server_port;
  21. fastcgi_param  SERVER_NAME        $server_name;

  22. # PHP only, required if PHP was built with --enable-force-cgi-redirect
  23. fastcgi_param  REDIRECT_STATUS    200;
复制代码
3.新建/etc/nginx/conf.d/php.locations文件,并放入以下内容
  1. location ~ [^/]\.php(/|$) {
  2.     fastcgi_split_path_info ^(.+?\.php)(/.*)$;
  3.     if (!-f $document_root$fastcgi_script_name) {
  4.         return 404;
  5.     }
  6.     # Mitigate https://httpoxy.org/ vulnerabilities
  7.     fastcgi_param HTTP_PROXY "";
  8.     #error_log /dev/null;
  9.     fastcgi_connect_timeout 300s;
  10.     fastcgi_read_timeout 300s;
  11.     fastcgi_send_timeout 300s;
  12.     fastcgi_buffer_size 32k;
  13.     fastcgi_buffers 4 32k;
  14.     fastcgi_busy_buffers_size 32k;
  15.     fastcgi_temp_file_write_size 32k;
  16.     client_body_timeout 10s;
  17.     send_timeout 60s; # default, increase if experiencing a lot of timeouts.
  18.     output_buffers 1 32k;
  19.     fastcgi_index index.php;
  20.     #fastcgi_pass 127.0.0.1:1026;
  21.     fastcgi_pass unix:/var/run/php8-fpm.sock;
  22.     # include the fastcgi_param setting
  23.     include fastcgi_params;

  24.     # SCRIPT_FILENAME parameter is used for PHP FPM determining
  25.     #  the script name. If it is not set in fastcgi_params file,
  26.     # i.e. /etc/nginx/fastcgi_params or in the parent contexts,
  27.     # please comment off following line:
  28.     fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
  29. }

  30. location = /blog/  {
  31.     fastcgi_split_path_info ^(.+?\.php)(/.*)$;
  32.     if (!-f $document_root$fastcgi_script_name) {
  33.         return 404;
  34.     }
  35.     # Mitigate https://httpoxy.org/ vulnerabilities
  36.     fastcgi_param HTTP_PROXY "";
  37.     #error_log /dev/null;
  38.     fastcgi_connect_timeout 300s;
  39.     fastcgi_read_timeout 300s;
  40.     fastcgi_send_timeout 300s;
  41.     fastcgi_buffer_size 32k;
  42.     fastcgi_buffers 4 32k;
  43.     fastcgi_busy_buffers_size 32k;
  44.     fastcgi_temp_file_write_size 32k;
  45.     client_body_timeout 10s;
  46.     send_timeout 60s; # default, increase if experiencing a lot of timeouts.
  47.     output_buffers 1 32k;
  48.     fastcgi_index index.php;
  49.     index index.php;
  50.     #fastcgi_pass 127.0.0.1:1026;
  51.     fastcgi_pass unix:/var/run/php8-fpm.sock;
  52.     # include the fastcgi_param setting
  53.     include fastcgi_params;

  54.     # SCRIPT_FILENAME parameter is used for PHP FPM determining
  55.     #  the script name. If it is not set in fastcgi_params file,
  56.     # i.e. /etc/nginx/fastcgi_params or in the parent contexts,
  57.     # please comment off following line:
  58.     fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
  59. }

  60. location = /blog/admin/  {
  61.     fastcgi_split_path_info ^(.+?\.php)(/.*)$;
  62.     if (!-f $document_root$fastcgi_script_name) {
  63.         return 404;
  64.     }
  65.     # Mitigate https://httpoxy.org/ vulnerabilities
  66.     fastcgi_param HTTP_PROXY "";
  67.     #error_log /dev/null;
  68.     fastcgi_connect_timeout 300s;
  69.     fastcgi_read_timeout 300s;
  70.     fastcgi_send_timeout 300s;
  71.     fastcgi_buffer_size 32k;
  72.     fastcgi_buffers 4 32k;
  73.     fastcgi_busy_buffers_size 32k;
  74.     fastcgi_temp_file_write_size 32k;
  75.     client_body_timeout 10s;
  76.     send_timeout 60s; # default, increase if experiencing a lot of timeouts.
  77.     output_buffers 1 32k;
  78.     fastcgi_index index.php;
  79.     index index.php;
  80.     #fastcgi_pass 127.0.0.1:1026;
  81.     fastcgi_pass unix:/var/run/php8-fpm.sock;
  82.     # include the fastcgi_param setting
  83.     include fastcgi_params;

  84.     # SCRIPT_FILENAME parameter is used for PHP FPM determining
  85.     #  the script name. If it is not set in fastcgi_params file,
  86.     # i.e. /etc/nginx/fastcgi_params or in the parent contexts,
  87.     # please comment off following line:
  88.     fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
  89. }
复制代码
此处解释一下,location ~ [^/].php(/|$)项是为了手动输入/www下多层目录的php文件,location = /blog/项是为了输入域名/blog后默认打开/blog下的index.php,location = /blog/admin项也是雷同
3.修改/etc/config/nginx文件,下面是我的配置,仅供参考
  1. config main global
  2.         option uci_enable 'true'

  3. config server '_lan'
  4.         #list listen '433 ssl default_server'
  5.         #list listen '[::]:433 ssl default_server'
  6.         option server_name '_lan'
  7.         list include 'restrict_locally'
  8.         list include 'conf.d/*.locations'
  9.         option uci_manage_ssl 'self-signed'
  10.         option ssl_certificate '/etc/nginx/conf.d/_lan.crt'
  11.         option ssl_certificate_key '/etc/nginx/conf.d/_lan.key'
  12.         option ssl_session_cache 'shared:SSL:32k'
  13.         option ssl_session_timeout '64m'
  14.         option access_log 'off; # logd openwrt'

  15. config server '_redirect2ssl'
  16.         list listen '80'
  17.         list listen '[::]:80'
  18.         option server_name '_redirect2ssl'
  19.         option return '302 https://$host$request_uri'

  20. config server '_redirect2ssl'
  21.         list listen '90'
  22.         list listen '[::]:90'
  23.         option server_name '_redirect2ssl'
  24.         option return '302 https://$host:433$request_uri'
复制代码
解释:由于Openwrt的nginx启动脚本强制从/etc/config/nginx加载后转化成/var/lib/nginx/uci.conf,无法更改太多东西,所以/etc/config/nginx仅改一下端口、强制http转https,因为运营商默认屏蔽80\443端口,只能改其他端口
4.新建/etc/nginx/conf.d/new.conf,并放入以下内容:
  1. server { #see uci show 'nginx._lan'
  2.     listen 433 ssl default_server;
  3.     listen [::]:433 ssl default_server;
  4.     server_name wangyougx_com;
  5.     include restrict_locally;
  6.     include conf.d/*.locations;
  7.     ssl_certificate /etc/nginx/conf.d/wangyougx_com.crt;
  8.     ssl_certificate_key /etc/nginx/conf.d/wangyougx_com.key;
  9.     ssl_session_timeout 10m;
  10.     ssl_protocols TLSv1.2 TLSv1.3;
  11.     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
  12.     ssl_prefer_server_ciphers on;
  13.     include mime.types;
  14. }
复制代码
解释:如果你的域名已有证书,就填入,切记不要试图修改Nginx默认的_lan.crt!没用的;
操作到这里,基本算完成了,接下来重启以下服务:
  1. /etc/init.d/uwsgi restart
  2. /etc/init.d/php8-fpm restart
  3. /etc/init.d/nginx restart
复制代码
附加建议:
1.建议将/etc/uwsgi/emperor.ini 内的vassal-set项目改成vassal-set = die-on-idle=false(进程不休眠重启)
2.通过logread命令查看日志,会发现提示/www/favicon.ico文件不存在,这个是网页标签图标,可不理会,也可以找个喜欢的图标放进去即可。
一些细节不清楚可以参考以下文章,很多内容都是参考他们的成果,感激感激

只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
 楼主| 发表于 2023-3-8 17:27 | 显示全部楼层
0回复惨案
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-3-8 17:42 | 显示全部楼层
想知道这样会不会有什么安全隐患,因为这样的话nginx可以通过访问系统的绝大部分资源,但是又同时可以通过公网访问

点评

默认不会的,配置文件里面写好路径  详情 回复 发表于 2023-3-9 09:35
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-3-9 00:08 来自手机 | 显示全部楼层
很详实的帖子,下次我也改一下试试。
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-9 09:35 | 显示全部楼层
l20210120 发表于 2023-3-8 17:42
想知道这样会不会有什么安全隐患,因为这样的话nginx可以通过访问系统的绝大部分资源,但是又同时可以通过 ...

默认不会的,配置文件里面写好路径
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-3-9 10:56 | 显示全部楼层
我都是直接安装一个nginx,让uhttpd把80端口让给nginx,由nginx添加一个反代就行了,其它网站直接绑定域名就行了。

点评

老师,我uhttpd 80端口让不出来,改成其他端口,还是有个占用。。。。。。  详情 回复 发表于 2023-5-7 13:09
这样没有意义呀,最终还是uhttpd,我之前遇到高并发请求uhttp(1秒请求一次),内核就会抛出uhttp崩溃并重启,无奈我才换nginx,官方原版自己编译的,应该是官方的bug  详情 回复 发表于 2023-3-9 16:37
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-9 16:37 | 显示全部楼层
平淡如盐 发表于 2023-3-9 10:56
我都是直接安装一个nginx,让uhttpd把80端口让给nginx,由nginx添加一个反代就行了,其它网站直接绑定域名就 ...

这样没有意义呀,最终还是uhttpd,我之前遇到高并发请求uhttp(1秒请求一次),内核就会抛出uhttp崩溃并重启,无奈我才换nginx,官方原版自己编译的,应该是官方的bug
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-5-7 13:09 来自手机 | 显示全部楼层
平淡如盐 发表于 2023-3-9 10:56
我都是直接安装一个nginx,让uhttpd把80端口让给nginx,由nginx添加一个反代就行了,其它网站直接绑定域名就 ...

老师,我uhttpd 80端口让不出来,改成其他端口,还是有个占用。。。。。。

点评

更改端口配置后重启uhttpd才行。注意IPV4和V6都要改。  详情 回复 发表于 2023-5-9 15:22
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-5-9 15:22 | 显示全部楼层
247299940 发表于 2023-5-7 13:09
老师,我uhttpd 80端口让不出来,改成其他端口,还是有个占用。。。。。。 ...

更改端口配置后重启uhttpd才行。注意IPV4和V6都要改。
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-8-22 22:35 | 显示全部楼层
有没有跟着教程做成功的
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-8-22 23:55 | 显示全部楼层
操作之前,可以备份, 然后出现问题再还原回来. 问题不大, 小伙伴们冲冲冲

点评

额,忘了提醒大家备份了,哈哈哈  详情 回复 发表于 2023-9-28 09:51
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-28 09:51 | 显示全部楼层
15963782491 发表于 2023-8-22 23:55
操作之前,可以备份, 然后出现问题再还原回来. 问题不大, 小伙伴们冲冲冲

额,忘了提醒大家备份了,哈哈哈
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-11-2 10:01 | 显示全部楼层
这样可以全站https了吗?
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2024-1-20 15:21 | 显示全部楼层
本帖最后由 fghdbs 于 2024-1-20 15:56 编辑


刷了新固件,直接按教程安装Nginx,
登录路由器
502 Bad Gateway
502 Bad Gateway                     

求解决

点评

老哥,麻烦发截图,我帮您看看  详情 回复 发表于 2024-2-3 23:02
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2024-2-3 23:02 | 显示全部楼层
fghdbs 发表于 2024-1-20 15:21
刷了新固件,直接按教程安装Nginx,
登录路由器
502 Bad Gateway

老哥,麻烦发截图,我帮您看看

点评

谢谢,去掉/etc/nginx/conf.d/new.conf,就好了,这个不能用!! 这个是建立博客用的,太小白了,只会无脑抄.  详情 回复 发表于 2024-3-2 16:33
就是网页登录192.168.1.1(路由器IP),就出现502 Bad Gateway。进不了路由器管理页 没有办法吗,就重置了X86固件  详情 回复 发表于 2024-2-5 23:43
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-9-22 17:29

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com

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