正确配置nginx+mysql8+php7.4 wordpress环境 解决nginx 403 Forbidden 和 selinux问题

正确配置nginx+mysql8+php7.4 wordpress环境 解决nginx 403 Forbidden 和 selinux问题

0. 教程

本教程分为三篇,第一篇搭建环境,第二篇设置环境,第三篇配置https访问

1. 前言

如果你是搜索解决nginx 403 Forbidden 和 selinux问题 点进来,请直接看2.2 2.3 2.5节 谢谢

在上一篇教程里,我们已经安装好nginx+mysql8+php7.4了,接下来我们分别对他们进行配置,便可以搭建好你的wordpress环境。

1.1 一些想说的

本人的技术自定义为过家家级别,很多方面还需要各位多多指教,有写的不好或错误的地方还请包涵指正,感谢花时间阅读我的教程

1.2 requirements

  • wordpress文件 注意选择下载.tar.gz
  • winscp 懒人软件,用于使用gui传输文件到你的服务器,若不需要,请自行理解文中的文件操作。
  • heidisql 用于连接数据库,你也可以使用你习惯的
  • 本文使用root账户登录,请自行决定是否需要加上sudo

2. 开始配置

首先也是使用ssh连上服务器

2.1 配置mysql

  1. 在安装完成mysql之后,系统分配了一个随机的默认密码,我们需要操作数据库修改这个密码,否则系统不允许我们使用。通过以下命令获取随机的密码。
    grep 'temporary password' /var/log/mysqld.log
    在提示A temporary password is generated for root@localhost:后面的内容便是密码,不包括第一个空格

  2. 使用mysql -p登录到mysql,出现密码输入提示时使用上面得到的密码,注意输入过程中屏幕不会有显示(现在说这个好像有点多余)。登陆成功后命题前缀变成mysql>,现在便是mysql命令行,请注意在每个语句结束时使用分号;。接下来的操作需要理解的话得有一点mysql的基础,若没有直接照着做就可以了。

  3. 接下来修改密码,输入
    ALTER USER 'root'@'localhost' IDENTIFIED BY '你的密码';
    mysql默认对于密码有着严格的限制,需要使用八位以上的大小写+符号+数字。因为他也不知道你是学习还是真正的生产环境,如需更改密码严格度请自行搜索,但是如果你需要更改这个策略,好像也是需要先设置一个这样强度的密码,所以我建议就这样用了。

  4. 接下来允许除了本地以外访问数据库,。先选择数据库
    use mysql;
    然后我们先来看一眼当前的设置
    select host, user from user;
    可以看到打印出一个表状的东西,在user列中的root便是当前的账户,host里便是允许链接的地址。我们就是要将这一项改成无限制%,若你有一点基础,马上想到需要怎么做了
    UPDATE user SET host='%' WHERE user ='root';

  5. 最后我们刷新一下权限
    flush privileges;
    然后退出
    exit

  6. 接下来回到gui的世界,下载安装好heidisql或任何你习惯的数据库编辑软件,连接上数据库,创建一个wordpress专用的账号与数据库,注意账号权限的设置应该是只允许操作wp的数据库,下面使用heidisql进行演示。
    先新建连接
    正确配置nginx+mysql8+php7.4 wordpress环境 解决nginx 403 Forbidden 和 selinux问题_第1张图片
    创建一个数据库,注意选择字符集 正确配置nginx+mysql8+php7.4 wordpress环境 解决nginx 403 Forbidden 和 selinux问题_第2张图片
    正确配置nginx+mysql8+php7.4 wordpress环境 解决nginx 403 Forbidden 和 selinux问题_第3张图片
    进入用户管理
    正确配置nginx+mysql8+php7.4 wordpress环境 解决nginx 403 Forbidden 和 selinux问题_第4张图片
    创建用户
    正确配置nginx+mysql8+php7.4 wordpress环境 解决nginx 403 Forbidden 和 selinux问题_第5张图片

  7. 其实到这里,mysql的配置就好了,但是我的机子内存比较小,如果你也是小内存机器,可以想我这样优化一下配置,这样一来,mysql的内存占用就从300m+下降到150m
    nano /etc/my.cnf
    在最下面粘贴

     performance_schema = OFF
     innodb_buffer_pool_size = 8M
     table_definition_cache = 400
     table_open_cache = 256
    

    非常抱歉我没有研究过mysql调优,不敢乱说,有机会再补充上这里的解释。保存后记得重启mysqlsystemctl restart mysqld.service

2.2 配置php

  1. **账户问题说明:**这是重点中的重点,许多教程没有讲,到后面出现各种wordpress的运行问题,这还是小事,很多教程在后面出现问题之后,直接将文件权限设置为0777,留下非常大的安全隐患!安装nginx的时候,默认创建了nginx组与nginx用户,那我们直接使用nginx的账户,当然,你也可以用别的,只不过配置起来会挺麻烦

  2. 配置php所使用的账户,配置文件在
    nano /etc/opt/remi/php74/php-fpm.d/www.conf
    分别把user、group改为nginx

  3. 重启phpsystemctl restart php74-php-fpm.service

  4. 如果想要验证一下,可以使用ps -aux|grep php-fpm,第一列是nginx即正常

2.3 复制wordpress文件

  1. 首先创建一个文件夹存放wp的文件,路径随意,但要好找,我这里就是mkdir /home/web/wp

  2. 复制并解压wp,这里我们使用winscp进行文件操作,你也可以使用wget来手动下载,请自行研究。
    正确配置nginx+mysql8+php7.4 wordpress环境 解决nginx 403 Forbidden 和 selinux问题_第6张图片
    登录后定位到刚刚的文件夹,直接将wp的压缩包拉进来,然后进行解压
    正确配置nginx+mysql8+php7.4 wordpress环境 解决nginx 403 Forbidden 和 selinux问题_第7张图片
    弹出窗口直接按确定,然后就得到了wordpress文件夹

  3. 设置文件夹所有者,这个和2.2.1一样是很少教程提及的重点,这里处理不好,很容易导致nginx 403 Forbidden错误。首先我们让nginx拿到文件夹的权限chown -R nginx:nginx /web-R表示对所有子文件、文件夹进行设置,注意,在每次winscp拉文件进来之后都需要执行一次
    如需检验,可以cd到路径之后cd /web/wp/wordpress,使用ls -l进行验证,看到三四列显示nginx nginx即可

  4. 为文件设置权限chmod 0770 -R /web0770表示同组的所有用户都有读写执行的权限

  5. 如此一来,wp运行的时候应该就不会有莫名其妙的权限问题报错了

2.4 配置nginx

  1. 进入nginx的配置文件/etc/nginx/nginx.conf,如果你熟悉nginx,可以自行配置,如不熟悉,建议使用winscp,将该文件拖到windows下,使用visual studio code进行编辑,注意每条结束需要分号
    我们先注释原本的默认server,在原来server同一个级别下复制加入下面的server
        server {
            # 监听的端口
            listen       80 default_server;
            listen       [::]:80 default_server;
            # "监听"的url 因为设置了default_server 所以写个下划线就行 如果你有自己的域名可以填上
            server_name  _;
    
            # 为了安全 在配置的时候不允许其他ip访问 配置结束之后记得注释下面两行
            allow        !!!你的ip地址,可以在搜索引擎搜索ip得到;
            deny         all;
    
            # 配置最大上传文件大小
            client_max_body_size 120m;
    
            # 网站目录
            root         !!!你刚刚解压的网站目录,我这里是/web/wp/wordpress;
    
            # Load configuration files for the default server block.
            include /etc/nginx/default.d/*.conf;
    
            location / {
                index index.php index.html index.htm;
            }
    
            # php请求转发处理 也就是说 访问到了php文件的时候 扔给php服务器
            location ~ \.php$ {
                # 默认是本地9000端口 可以使用 netstat -nlp|grep php进行验证
                fastcgi_pass   127.0.0.1:9000;
                # 设置请求路径
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                # 引入配置
                include        fastcgi_params;
            }
        }
    
    使用nginx -t测试文件是否可用,显示successful后使用nginx -s reload进行配置重新加载,有错误请检查配置文件,没有错误的话,现在试着访问该计算机的ip,应该就能弹出wp的配置页面了。

2.5 仍然403 Forbidden?selinux!

本人对selinux认识也不多,只知道这玩意是为了安全搞出来的,所以网上一堆教程让你直接关闭我肯定不会做。但确实,这是最快出效果的方法,却可能引起一堆安全问题。在这里坑了我几个小时,我参考了下面几篇文章,但觉得还是不够合理,有知道怎么治标治本的朋友欢迎留言。

https://www.cnblogs.com/caijt/p/10982470.html
https://www.jianshu.com/p/ae3f8a8ca54f
https://blog.csdn.net/jiujiudsj/article/details/104195472
https://medium.com/@getpagespeed/nginx-selinux-configuration-74938ef08670
https://stackoverflow.com/questions/27435655/proxy-pass-isnt-working-when-selinux-is-enabled-why

简单来说分为以下几步

  1. 设置目录的默认安全上下文semanage fcontext -a -t httpd_sys_rw_content_t '/web(/.*)?'其中'/web(/.*)?'替换成你的网站根目录

  2. 重置已存在的文件为默认安全上下文 restorecon -R /web -R还是递归处理目录下所有文件的意思,/web需要按需替换成你的网站根目录

  3. 防止以后的跨域问题setsebool -P httpd_can_network_connect 1

  4. 设置这个能正确生成wp-config,但有传言说不安全setsebool -P httpd_unified 1

  5. 如果想继续操作,可以看上面的引用连接倒数两个。如果在生产环境使用,强烈建议学习selinux相关知识。

2.6 初始化wordpress

按照上面创建的数据库、用户,填入wp的初始化页面即可
正确配置nginx+mysql8+php7.4 wordpress环境 解决nginx 403 Forbidden 和 selinux问题_第8张图片

接下来跟着配置就能完成设置了

3. 后记

教大家一个非常有用的命令 find,当你接触的配置文件变多了之后,经常容易记不起他们的位置,这个时候只需要执行find / -name "搜索内容"就可以快速搜索配置文件,他表示从根目录开始匹配搜索,可以使用通配符*来匹配忘记的内容 比如我想搜索nginx.conf,只需要find / -name "nginx.conf"

至此,你已经能使用ip访问你的wordpress了!不过请注意,如果你要配置域名访问,https访问,请不要开始写文章,特别是上传图片和下载主题、插件,因为url会乱!此外,关于selinux的问题实属惭愧,希望懂行的大佬多多指点,如果你觉得不安全,可以试着把第四步的bool设置为0,本人没测试会带来的后果,不过估计就是wp上传不了东西。

你可能感兴趣的:(nginx,mysql,php,运维,linux)