2025年7月


环境:linux/nginx

在一些使用环境中,早期的https版本由于安全性不够好已经不建议使用,托管商或代码会要求网站停止使用不安全的TLS1.0/TLS1.1协议。

对应于nginx中相关配置指令是ssl_protocols,修改后通过sslscan工具发现始终没生效。查阅nginx的文档,发现有这么一句话If the directive is specified on the [server] level, the value from the default server can be used。

翻译过来就是:如果在server块中使用ssl_protocols了,那么该指定会直接使用默认的值,而并不是当前server块中指定的值。而如果nginx没有默认的server时,将会使用第一个server作为默认的server。因此需要在第一个server或默认的server中,配置ssl_protocols。也可以在http块中指定ssl_protocols。

http {
#...
        # 指定支持的 SSL/TLS 协议版本
        ssl_protocols TLSv1.2 TLSv1.3;
#...

}

再翻译一下,一个linux服务器通常会在nginx中跑多个网站,以lnmp.sh为例,系统在安装时会在总配置文件nginx.conf中建一个默认站点,其它新建的站点每个网站会在vhost目录下生成一个单独的配置文件:

//以lnmp.sh为例,配置文件在/usr/local/nginx/nginx.conf中:

server
    {
        listen 800 default_server reuseport;
        #listen [::]:80 default_server ipv6only=on;
        server_name _;  //默认站点
        index index.html index.htm index.php;
        root  /home/wwwroot/default;
        ssl_protocols TLSv1.2 TLSv1.3;
        ...

    }
include vhost/*.conf; //其它站点

如上配置,如果nginx.conf中指定了ssl_protocols,这个就是默认的配置,如果这个文件中有多段server{},那么后面的会覆盖前面的。如果每个网站都要修改,就需要分别设置vhost中的所有的配置。

做网站的都知道,起初是注册一个域名,然后买一个虚拟空间(vhost),把域名a记录解析到空间,通过ftp把网站程序上传到空间中,一个网站就建成了。

然而ftp并不安全,而且经常几百个网站共用一个ip,一个有问题会连累同服务器几百个网站被搜索引擎K站。

玩着玩着,就变成了玩linux服务器,自己搭环境,这时候上传文件就用ssh比较多。比如前文说到的执行命令用putty,上传文件用sftp工具,比如putty家的bitvise SSH Client,要学的东西也越来越多。

要说方便也方便,但是还是不如本地电脑这样c盘拷贝到d盘这么方便。有没有一种可能,像映射网络磁盘这样,实现网站服务器与本地电脑像c盘拷d盘这样用呢?

有,还真找到这样的工具。

安装WinFsp https://github.com/billziss-gh/winfsp/releases/

安装SSHFS-Win https://github.com/billziss-gh/sshfs-win/releases

安装好后重启电脑,在桌面我的电脑图标上点右键,映射网络驱动器,弹出对话框:

sshfs.jpg

驱动器这里的X,就是映射成功能本地电脑中显示X盘。

文件夹:\\sshfs.r\root@8.8.8.8\    这是一种固定格式ssh.r表示以root权限登录到根目录,root是服务器用户名,@8.8.8.8是你的linux服务器地址,这个映射完成后,是直接以root身份把服务器的根目录\映射到本地X盘。如下图:

未标题-1.jpg

是不是方便很多? ssh有很多骚操作,这是很有意思的一个。

 

扩展:

1.如果服务器的sshd的端口不是默认的22怎么办?

格式:\\sshfs.r\root@8.8.8.8!2222

这里是连接到服务器的sshd使用的2222端口

 

2. 不想映射到服务器根目录,只映射到指定目录怎么办?

格式:\\sshfs.r\root@8.8.8.8!2222\www\wwwroot

这里就是直接映射到网站环境的根目录。

 

3.不想使用root用户怎么办?

格式:\\sshfs.r\test@8.8.8.8!2222\home\test\

这里使用test用户连接服务器,并且指定到test用户家目录(别的目录没权限)

 

4.能使用服务器的域名吗?

格式:\\sshfs.r\test@www.google.com!2222\home\test\

当然没问题,如上格式把www.google.com换成你的域名即可

letsencrypt.jpg

环境:centos7-64 php,使用了lnmp.org一键搭配脚本


使用lnmp ssl add生成ssl证书失败,提示/usr/local/acme.sh/upgrade.sh: No such file or directory。

已知lnmp.org脚本是使用github上的acme.sh进行的生成,根据日志到/usr/local/目录中找不到acme.sh,猜测是根本没有下载到脚本。查看日志,有下面一段:

--2024-09-02 16:58:23--  https://soft.vpser.net/lib/acme.sh/latest.tar.gz
Resolving soft.vpser.net (soft.vpser.net)... failed: Name or service not known.
wget: unable to resolve host address ‘soft.vpser.net’
tar (child): latest.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
/usr/bin/lnmp: line 1186: cd: acme.sh-*: No such file or directory
/usr/bin/lnmp: line 1187: ./acme.sh: No such file or directory
sed: can't read /usr/local/acme.sh/acme.sh: No such file or directory
/usr/bin/lnmp: line 1192: /usr/local/acme.sh/upgrade.sh: No such file or directory
chmod: cannot access '/usr/local/acme.sh/upgrade.sh': No such file or directory
Restarting cron (via systemctl): cron.service.
/usr/bin/lnmp: line 1220: /usr/local/acme.sh/acme.sh.env: No such file or directory
Generate ssl certificate using BuyPass...
/usr/bin/lnmp: line 1339: /usr/local/acme.sh/acme.sh: No such file or directory

注意日志中有关键的一段:Resolving soft.vpser.net (soft.vpser.net)... failed: Name or service not known,由于论坛现在登录不了,也找不到作者,根据这一句进行搜索,果然也有人遇到这个问题,起因是可能是由于域名被墙,导致大面积安装故障,办法是将脚本中的旧地址换成新地址。


打开/usr/bin/lnmp,1180行左右,将其中的https://soft.vpser.net/lib/acme.sh/latest.tar.gz,改为https://soft.lnmp.com/lib/acme.sh/latest.tar.gz。


保存后重新执行lnmp ssl add,问题解决。

参考:https://bbs.lnmp.com/thread-27108-1-1.html

在一个号称AI免费设计logo网站里制作了一个logo,制作了一个还不错,但是到下载的一步要求付费199。

这套路玩的真6,干它!

在chrome浏览器中显示这个logo,这个logo是使用svg实时渲染的,首先看有没有一些图标先将其最大化,然后按f12打开浏览器调试,通过鼠标点击dom一层一层找到logo所在的dom,这个网站是比较鸡贼的,每两三秒刷新一下动画dom变来变去,很难选中。

svg图片下载

找到svg所在dom的父级dom,右键复制-复制元素,好几次复制出来粘贴到记事本都是undefiende,功夫不负有心人,终于在某一次logo显示的时候又复制了一次,粘贴到记事本得到一大片代码。如图:

 

先放到notepad--里面格式化一下,明显的有很多html代码,中间包裹着一对<svg>..........</svg>,把前后的都去掉,然后保存成一个1.svg文件。

svg2.png

 

使用inkscape或coreldraw打开,瞬间得到这个logo,接下来想怎么玩就随意了。

svg3.png

环境:centos7-64 aapanel php8.3

导入innsohop0.5完整包后,然后进入宝塔(aapanel)面板,将根目录手工指定到/www/wwwroot/wwwtttcom/public,同时取消open_basedir限制。这是由于innoshop使用的是laravel框架,public是应用程序目录,上一极是laravel框架目录。

1. 404 not found

这是第一个问题,在面板中当前网站的配置中,到最下面加入:

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

微信图片_20250718101821.png

 

当然手工配置也是可以的,找到/www/panel/nginx/vhost/www.ttt.com.conf文件,在最下面加入上面内容也行,重启nginx即可。

如果修改好后失败,那么找到public目录下,删除或者清空.user.ini文件。

 

2. file_put contents .env Faled to open stream: Permission denied

在继续安装过程中,又出现了下面错误:

file_put contents(Awwwwwrootiwwtttcom/.env): Faled to open stream: Permission denied

这明显是一个权限问题,要访问.env文件但是受限了。

进入larave的目录,即网站根目录public的上一层目录,使用ll -a命令显示出以.开头的隐藏目录。显示.env文件从属于root,改成从属于www用户。

chown www:www .env

这是个应用的配置文件,不需要重启服务器,刷新页面问题解决,直至完装完成。

系统中部署了waf,默认是要接管80端口,可是lnmp环境又安装了宝塔国际版的aapanel,安装完后会生成一个默认的站点,当访问http://ip的时候会显示。

问题就产生了,如果waf先启动,后面lnmp启动就报错。如果lnmp先启动了,waf就不能成功启动。那怎样解决这个问题呢?

我们规划一下,让waf使用80端口,用户访问时流量选进waf洗一遍,然后再转发到后面各网站,网站httpd服务指定到88端口。思路如下:

 

首先需要修改http服务默认端口(即主配置文件)监听,这一步宝塔面板中没有提供,必须手工到配置文件中修改。

apache在/www/server/apache/conf/httpd.conf,找到Listen 80改成88。

nginx在/www/server/nginx/conf/nginx.conf,listen 80; # 改为 listen 88。

phpfpm在/www/server/panel/vhost/nginx/phpfpm-status.conf,listen 80;改为listen 88;

 

下面是修改各个网站(vhost)的端口监听,可以在面板中修改也可以手工修改,二选一即可。

在面板中修改各网站端口

在新网站的时候,习惯上端口就是默认的80,但是事后在面板的设置中域名管理这里,默认就是80并且不可修改,怎么办呢? 

这里如果手工去修改也是很麻烦的,因为像宝塔这样的面板可能存在多处配置文件和多个网站配置,来到域名管理这里点添加比如www.xxx.com:88,保存后再将默认的80删除即可。再到其它网站配置中把所有的80修改完。

需要注意的是,宝塔存在一个默认站点的配置在网站列表是不显示的,如果把列表中的都修改完了发现80端口还占用着,就需要把这个也改掉。

 

手工修改各网站端口

1.nginx环境

找到位置/www/server/panel/vhost/nginx/0.default.conf,将80改成其它无用端口即可。

server
{
    listen 88;
    server_name _;
    index index.html;
    root /www/server/nginx/html;
}

保存,面板将重载nginx配置,修改完成。

2.apache环境

配置文件在/www/server/panel/vhost/apache中,这里的每一个配置文件都对应于一个网站,与宝塔面板中对应。这里会有一个名为0.default.conf的配置文件,这个默认就是80端口。

打开文件如下:

<VirtualHost *:88>
    ServerName bd512ec1.www.xxx.com
    ServerAlias www.xxx.com

只需修改<VirtualHost *:88>即可,无需在下面两行中再添加端口。保存即可。

lnmp.org环境安装innoshop

这是一系列的错误,在上一篇里遇到了lnmp.org环境安装innoshop0.5版本的情况,分开说:

1.lnmp.org脚本安装innoshop报http error 500错误及安装php多版本失败

起初遇到这个问题,是由于lnmp.org后台只安装了php7.3,所以放入代码后直接报http error 500的错误,经自查发现是php版本低了。于是使用./install.sh mphp安装多版本时,又遇到configure: error: *** A compiler with support for C++17 language features is required,这是系统的c++运行库版本低了。

辗转又去安装DevToolset,最终成功安装了php8.2,具体情况看这一篇:

http://www.784533.xyz/archives/224/

 

2.composer install安装错误

Fatal error: Uncaught Error: Failed opening required '/home/wwwroot/www.ledmore.cn/public/../vendor/autoload.php' (include_path='.:/usr/local/php8.2/lib/php') in /home/wwwroot/www.ledmore.cn/public/index.php:21 Stack trace: #0 {main} thrown in /home/wwwroot/www.ledmore.cn/public/index.php on line 21

判断上面错误来自于laravel框架的报错,由于innoshop使用了comoser组件,正常情况下只使用的是完整程序包,丢进去就直接杺看到安装界面。

到网站根目录删除composer.lock文件,重启执行composer install,运行了几十条之后出现新报错:

Problem 1 - Root composer.json requires php ^8.2 but your php version (7.4.33) does not satisfy that requirement.

Problem 2 - Root composer.json requires aws/aws-sdk-php ^3.342 -> satisfiable by aws/aws-sdk-php[3.342.0, ..., 3.350.1]. - aws/aws-sdk-php[3.342.0, ..., 3.350.1] require php >=8.1 -> your php version (7.4.33) does not satisfy that requirement.

Problem 3 - Root composer.json requires phpunit/php-timer ^7.0 -> satisfiable by phpunit/php-timer[7.0.0, 7.0.1]. - phpunit/php-timer 7.0.1 requires php >=8.2 -> your php version (7.4.33) does not satisfy that requirement.

Problem 4 - Root composer.json requires laravel/pint 1.18.2 -> satisfiable by laravel/pint[v1.18.2]. - laravel/pint v1.18.2 requires php ^8.1.0 -> your php version (7.4.33) does not satisfy that requirement.

Problem 5 - intervention/image[3.5.0, ..., 3.11.3] require php ^8.1 -> your php version (7.4.33) does not satisfy that requirement.

这里就奇怪了,lnmp.org明明是升级了php8.2,但为什么显示 的是php7.4.33 ,不过转念一想,composer install是在shell中执行的,lnmp.org环境是配置了多版本,但是这并不是centos的系统默认配置,使用php -v一查,果然是php7.4.33,接下来就是要把系统配置php版本改成php8.2。

# 移除旧PHP链接
sudo rm /usr/bin/php

# 创建新链接到PHP 8.2
sudo ln -s /usr/local/php8.2/bin/php /usr/bin/php

# 验证版本
php -v  # 应显示 8.2.x

重启系列,执行comoser install直至完成。至此composer问题解决。

 

3.The Process class relies on proc_open

刷新页面,新问题出现:

[Symfony\Component\Process\Exception\RuntimeException] The Process class relies on proc_open, which is not available on your PHP installation.

这个好解决,这是lnmp.org为了安全,默认关闭了几个高危php函数。找到对应版本的php.ini文件,修改即可:

disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server

删除proc_open,proc_get_status,proc_open put_env,重启nginx问题解决。

//此处感谢innoshop创始人空山补充。

 

4. open_basedir相关报错

继续出现报错:

Warning: file_exists(): open_basedir restriction in effect.
File(/home/wwwroot/www.xxx.cn/public/../storage/installed) is not within the allowed path(s): (/home/wwwroot/www.xxx.cn/public/:/tmp/:/proc/) in /home/wwwroot/www.xxx.cn/public/index.php on line 9

Warning: file_exists(): open_basedir restriction in effect. File(/home/wwwroot/www.xxx.cn/public/../storage/framework/maintenance.php) is not within the allowed path(s): (/home/wwwroot/www.xxx.cn/public/:/tmp/:/proc/) in /home/wwwroot/www.xxx.cn/public/index.php on line 16

Warning: require(/home/wwwroot/www.xxx.cn/vendor/autoload.php):
Failed to open stream: Operation not permitted in /home/wwwroot/www.xxx.cn/public/index.php on line 21

Fatal error: Uncaught Error: Failed opening required '/home/wwwroot/www.xxx.cn/public/../vendor/autoload.php' (include_path='.:/usr/local/php8.2/lib/php') in /home/wwwroot/www.ledmore.cn/public/index.php:21 Stack trace: #0 {main} thrown in /home/wwwroot/www.ledmore.cn/public/index.php on line 21

由于laravel框架在设计上目录结构不同,举例一般网站/www/wwwroot/aaa_com这个就是根目录,但laravel thinphp这些不是,会把框架文件放在这个目录,但要把网站根目录指向/www/wwwroot/aaa_com/public,也许是为了为安全。但对于php来说,从一个文件访问向上的目录本就是一个跨站安全漏洞,为了正常使用laravel或innoshop,就不能做 open_basedir()限制。

可以通过phpinfo()查看是否启用跨站目录限制,这种限制有可能会出现在三个地方,一个是nginx的配置中,另一个在框架目录中的.usr.ini文件,或者在php.ini中。

首选清空或者删除.usr.ini文件,这个文件有只读属性,直接是删不掉的。

lsattr .usr.ini查看只否只读,chattr -i .usr.ini去掉只读属性。

然后将文件清空或者删除。

其次查看php.ini是否有限制,有就去掉。

最后检查 nginx.conf,如果有就一并清除。

重启系统,不再报错。

 

5.innoshop 500 Server Error报错

在经历上面的曲折后,又继续到了下一个报错,一个innoshop粉红色背景的500 Server Error,好在已经不是在php上面报错,程序已经在laravel中执行了,只是报的是500错误。

innoshop或者laravel对底层的报错进行了屏蔽,想看看具体的报错怎么办呢? 这时候不知道是去laravel中开启bebug还是到innoshop开启bebug,innoshop后台是有debug开关的,但我们目前还没有安装成功。

经咨询开发者,得知在框架目录下有一个.evn的文件,将APP_DEBUG=false修改为ture,刷新界面,神奇的是,这里没有看到报错,反而看到了正常的innoshop安装引导页面。

按步骤安装成功。

ps.至此说明还是有少少问题的,也许跟php err_reporting显示级别太低有关,此处暂时不深究。

 

文末感言,纵然lnmp.org是一个不错的lnmp运行环境,但是对于laravel和innoshop来说,并不是太合适,有时间我再测试一下宝塔的一些版本。

 

 

外面的vps使用国内的163和阿里云的代码仓库时,由于墙的存在,经常会卡死或ssh中断,这里改成国外的源。

A.推荐国外源(适合海外服务器/国际链路)

  1. 官方 Vault 源(归档源,适合 EOL 系统)



    • 地址:http://vault.centos.org/

    • 特点:官方历史版本仓库,CentOS 7 停止维护后的首选

  2. EU Frankfurt 源(欧洲节点,速度快)



    • 地址:http://mirror.easyname.at/centos/

    • 特点:欧洲大型镜像站,带宽充足

  3. US LiquidWeb 源(北美节点)



    • 地址:http://mirror.liquidweb.com/centos/

    • 特点:美国稳定镜像站

  4. 其他推荐



    • 新加坡:http://sg.mirror.rackspace.com/centos/

    • 日本:http://ftp.riken.jp/Linux/centos/

 

B.配置步骤(以 官方 Vault 源 为例)

1. 备份原有源

sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak

2. 修改基础源配置

sudo vi /etc/yum.repos.d/CentOS-Base.repo

3. 替换为以下内容(Vault 源配置)

[base]
name=CentOS-7 - Base (Vault)
baseurl=http://vault.centos.org/7.9.2009/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled=1

[updates]
name=CentOS-7 - Updates (Vault)
baseurl=http://vault.centos.org/7.9.2009/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled=1

[extras]
name=CentOS-7 - Extras (Vault)
baseurl=http://vault.centos.org/7.9.2009/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled=1

 

4. 禁用 fasttrack 源(避免冲突)

sudo sed -i 's/enabled=1/enabled=0/g' /etc/yum.repos.d/CentOS-Base.repo

5. 清理并重建缓存

sudo yum clean all
sudo yum makecache

 

C.验证源状态

yum repolist

输出应包含:

plaintext

repo id             repo name
base/7/x86_64       CentOS-7 - Base (Vault)
updates/7/x86_64    CentOS-7 - Updates (Vault)
extras/7/x86_64     CentOS-7 - Extras (Vault)

未标题-3.jpg

使用lnmp.org环境在安装innoshop时,访问域名时显示空白,同时报http error 500的错误,去官方看了一下要求是php8.2以上版本,而我本机环境是7.x,需要安装php的多版本。

到shell中执行.install.sh mphp,开始运行,但在几分钟后提示安装失败,并有大量报错,不过日志中有一段:

configure: error: *** A compiler with support for C++17 language features is required

搜了一圈没搜到,跑到deepseek问了一下,得到的结果如下:

在CentOS 7上使用lnmp.org脚本安装多版本PHP时出现configure: error: *** A compiler with support for C++17 language features is required错误,是因为系统默认的GCC版本(4.8.5)不支持C++17标准。

过程比较曲折,走了一些弯路,这里只写了顺序的过程:

1.切换Vault源

由于墙的存在,国内163和aliyun源虽好,但是连接容易中断,外面的Vault源比较全面。

备份原有源
sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak

修改基础源配置
sudo vi /etc/yum.repos.d/CentOS-Base.repo

替换为以下内容
[base]
name=CentOS-7 - Base (Vault)
baseurl=http://vault.centos.org/7.9.2009/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled=1

[updates]
name=CentOS-7 - Updates (Vault)
baseurl=http://vault.centos.org/7.9.2009/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled=1

[extras]
name=CentOS-7 - Extras (Vault)
baseurl=http://vault.centos.org/7.9.2009/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled=1

禁用 fasttrack 源(避免冲突)
sudo sed -i 's/enabled=1/enabled=0/g' /etc/yum.repos.d/CentOS-Base.repo

清理并重建缓存
sudo yum clean all
sudo yum makecache

验证源状态
yum repolist
repo id             repo name
base/7/x86_64       CentOS-7 - Base (Vault)
updates/7/x86_64    CentOS-7 - Updates (Vault)
extras/7/x86_64     CentOS-7 - Extras (Vault)
有vault字样说明正确。

 

2.安装DevToolset

a.修改google dns
sudo tee /etc/resolv.conf <<'EOF'
nameserver 8.8.8.8
nameserver 8.8.4.4
EOF

b.禁用 Fastest Mirror 插件
sudo sed -i 's/^enabled=1/enabled=0/' /etc/yum/pluginconf.d/fastestmirror.conf

c.安装 DevToolset
# 更新系统并安装 DevToolset-11
sudo yum update -y
sudo yum install devtoolset-11 -y

至此c++环境已经更新成功。


3. 安装php多版本
运行./install.sh mphp,选php8.2,至安装完成。

4.使用php8.2版本
找到/usr/local/nginx/conf/vhost/下面对应网站的配置文件,修改:
将include enable-php.conf修改为php8.2的enable-php8.2.conf并保存。

5.重启系统,问题解决。

vhost相关的配置文件在/usr/local,amce.sh php mysql nginx相关配置都在这个目录中。

lnmp.org脚本文件本身在/usr/bin/lnmp文件中。