服务器升级至centos8 网站配置-php与mysql从5.6升级到php7与msyql8
Author:zhoulujun Date:
linux centos8 安装php7 nginx1.4 mysql8 ,运行php网站,各个模块从零开始配置
CentOS7与centOS8的抉择
目前国内各大云服务器的默认centos 系统版本还是7,目前没有centos配套支持,国外云服务器厂商默认就是8,如vultr
centos8的性能提升,官网介绍的更清楚
安装centos8 min版本,在我的系统上查看,发现nginx默认是1.14
开发语言版本
Python 3.6
PHP 7.2
Ruby 2.5
Node.js 10
java::OpenJDK 11
数据库版本
MySQL 8.0
MariaDB 10.3
PostgreSQL 10 and PostgreSQL 9.6
Redis 5.0
而我的服务器msyql是msyql5.6 php是php5.6 ,我是选择重新来过一遍。
centos8 从零开始安装nginx mysql php 系统默认版本搭建php网站
centos8 安装nginx
安装nginx
yum install nginx php
启动nginx
systemctl start nginx.service
查看nginx状态
systemctl status nginx
设置nginx开机启动
systemctl enable nginx.service
centos8 安装php
安装php
yum install php
安装php拓展库
yum install php-json php-xml php-mysqlnd php-mbstring php-common php-gd
启动php
systemctl start php-fpm
查看php版本
php -V
设置php开机启动
systemctl enable php-fpm
centos8安装mysql
查看是否安装MySQL
rpm -qa | grep mysql
下载安装包文件
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
安装mysql-community-release-el7-5.noarch.rpm包
rpm -ivh mysql-community-release-el7-5.noarch.rpm
查看可用安装包
yum repolist all | grep mysql
安装mysql
yum install mysql-server
检查mysql是否安装成功。
rpm -qa | grep mysql
启动 mysql 服务
systemctl start mysqld.service
当然,现在最新的mysql 源
wget https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm
具体的,推荐阅读《centos按照mysql教程》
网站nginx selinux 文件权限配置
网站nginx配置
nginx基本配置,这里就不在多说了,查看《Nginx葵花宝典—草根站长配置Nginx运维百科全书》
像我这种小水管网站,需要注意的就是,nginx 限流
大致配置如下
# 1M能存储16384个状态,rete的值必须为整数, # 如果限制两秒钟一个请求,可以设置成30r/m ,其中$binary_remote_addr有时需要根据自己已有的log_format变量配置进行替换 limit_conn_zone $binary_remote_addr zone=perip:1m; limit_conn_zone $server_name zone=perserver:1m; #limit_req zone=perip burst=10; # 限制客户端并发连接数量为20, allow only one connection per an IP address at a time(每次). ; #是限制每个IP只能发起20连接 (addr 要跟 limit_conn_zone 的变量对应) # 表明以ip为key,来限制每个ip访问lmit.html文件时候,最多只能有一个在线,否则其余的都要返回不可用。 limit_conn perip 14; limit_conn perserver 10; limit_req_zone $binary_remote_addr zone=per_ip:1m rate=400r/s; limit_req_zone $server_name zone=per_server:10m rate=600r/s; limit_req zone=per_ip burst=300 nodelay; limit_req zone=per_server burst=500;
具体,推荐阅读《Nginx下limit_req模块burst参数超详细解析》
nginx配置目录结构如下
这里把本站配置贴一下
nginx基本配置
nginx配置文件为HOCON,intellij编辑的,配置查看:《HOCON:nginx配置文件后缀conf是什么格式类型文件夹?intellij如何编辑》,其他编辑器应该也有相应插件。有个插件认识代码,编辑器起来应该舒服些。
# For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Documentation: http://nginx.org/ru/docs/ user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. include /etc/nginx/modules/*.conf; events { # essential for linux, optmized to serve many clients with each thread # Linux 关键配置,允许单个线程处理多个客户端请求。 use epoll; # Determines how many clients will be served by each worker process. # (Max clients = worker_connections * worker_processes) # "Max clients" is also limited by the number of socket connections available on the system (~64k) # 配置单个 Nginx 单个进程可服务的客户端数量,(最大值客户端数 = 单进程连接数 * 进程数 ) # 最大客户端数同时也受操作系统 socket 连接数的影响(最大 64K ) worker_connections 51200; #用来配置nginx服务器是否可能多地接收客户端的连接请求,默认值为off multi_accept on; } # http config include /etc/nginx/http/default.conf; #include /etc/nginx/http/http_web.conf;
nginx http配置
http { ################################ logs ####################### log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; # Buffer log writes to speed up IO, or disable them altogether # 将日志写入高速 IO 存储设备,或者直接关闭日志。 # access_log /var/log/nginx/access.log main buffer=16k; access_log off; # only log critical errors 只记录 critical 级别的错误日志 error_log /var/log/nginx/error.log crit; ################################ file ####################### # types include /etc/nginx/mime.types; default_type application/octet-stream; charset UTF-8; # 只允许get post 请求 add_header 'Access-Control-Allow-Methods' 'GET, POST'; #隐藏掉nginx的版本号 server_tokens off; ################################ 开启gzip压缩 相关配置 ####################### gzip on; gzip_disable "MSIE [1-6]\."; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 4; gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss; gzip_vary on; gzip_proxied expired no-cache no-store private auth; # 请求设置优化配置 ####################### tcp_nodelay on; # sendfile() 不但能减少切换次数而且还能减少拷贝次数。 sendfile on; # 使缓冲区中的数据立即发送出去 tcp_nopush on; # 指定每个 TCP 连接最多可以保持多长时间。Nginx 的默认值是 75 秒,有些浏览器最多只保持 60 秒,所以可以设定为 60 秒 # 配置连接 keep-alive 超时时间,服务器将在超时之后关闭相应的连接 keepalive_timeout 65; types_hash_max_size 2048; client_max_body_size 2m; # Number of requests a client can make over the keep-alive connection. This is set high for testing. # 单个客户端在 keep-alive 连接上可以发送的请求数量,在测试环境中,需要配置个比较大的值。 keepalive_requests 10000; # Timeout for keep-alive connections. Server will close connections after this time. # 配置连接 keep-alive 超时时间,服务器将在超时之后关闭相应的连接。 # 客户端向服务端发送一个完整的 request header 的超时时间。如果客户端在指定时间内没有发送一个完整的 request header,Nginx 返回 HTTP 408(Request Timed Out client_header_timeout 40s; # send the client a "request timed out" if the body is not loaded by this time. Default 60. # 指定客户端与服务端建立连接后发送 request body 的超时时间。如果客户端在指定时间内没有发送任何内容,Nginx 返回 HTTP 408(Request Timed Out) client_body_timeout 40s; reset_timedout_connection on; # If the client stops reading data, free up the stale client connection after this much time. Default 60. # 客户端数据读超时配置,客户端停止读取数据,超时时间后断开相应连接,默认是 60 秒。 服务端向客户端传输数据的超时时间 send_timeout 30; server_names_hash_bucket_size 128; #客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小 client_header_buffer_size 32k; large_client_header_buffers 4 32k; ################################ 限速配置 ################################ limit_conn_log_level error; limit_conn_status 503; #limit_conn_zone $binary_remote_addr zone=one:1m; #limit_conn_zone $server_name zone=perserver:1m; # 定义一个名为allips的limit_req_zone用来存储session,大小是10M内存, # 以$binary_remote_addr 为key,限制平均每秒的请求为20个, # 1M能存储16384个状态,rete的值必须为整数, # 如果限制两秒钟一个请求,可以设置成30r/m ,其中$binary_remote_addr有时需要根据自己已有的log_format变量配置进行替换 limit_conn_zone $binary_remote_addr zone=perip:1m; limit_conn_zone $server_name zone=perserver:1m; #limit_req zone=perip burst=10; # 限制客户端并发连接数量为20, allow only one connection per an IP address at a time(每次). ; #是限制每个IP只能发起20连接 (addr 要跟 limit_conn_zone 的变量对应) # 表明以ip为key,来限制每个ip访问lmit.html文件时候,最多只能有一个在线,否则其余的都要返回不可用。 limit_conn perip 14; limit_conn perserver 10; limit_req_zone $binary_remote_addr zone=per_ip:1m rate=400r/s; limit_req_zone $server_name zone=per_server:10m rate=600r/s; limit_req zone=per_ip burst=300 nodelay; limit_req zone=per_server burst=500; ################################ web server ####################### include /etc/nginx/http/http_web.conf; }
nginx空域名设置,禁止ip访问
防止别把域名解析到我们的ip服务器,造成我们的ip被墙
# 关闭nginx空主机头 防止nginx空主机头及恶意域名指向 server { listen *:80 default; server_name _; #index index.html index.php index.htm; #root /data/wwwroot/zhoulujun; #include /etc/nginx/conf.d/php.conf; # rewrite ^(.*) //zhoulujun.cn permanent; return 301 https://www.zhoulujun.cn$request_uri; }
nginx php支持配置
################################ php 相关配置 ####################### # Load modular configuration files from the /etc/nginx/conf.d directory. # include /etc/nginx/conf.d/php-fpm.conf upstream php-fpm { server unix:/run/php-fpm/www.sock; } ################################ php fastcgi 相关配置 ####################### fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 256k; ################################ host ################################ include /etc/nginx/site/default.conf;
linux服务器 web目录权限设置
给需要读取的文件,设置644,给需要指向的文件,如php文章,设置755,给需要读写的文件夹,如html uploadfile 文件夹设置777
具体权限设置,可以参看我之前写的文章《理清用户组概念及文件权限—搞懂网站权限设置》
设置全部文件为为 644
chmod -R 644 /data/wwwroot
设置文件目录为755
find /path -type d -exec chmod 755 {} \; //设置目录权限为755
设置php类型文件为 755
find . -name "*.php" |xargs chmod 755 {} \;
设置了权限,由于centos8 默认开启selinux ,网站还是不能访问。一般报403错误。
linux文件批量处理,可以参看《exec与xargs范例详解:文件目录批量操作命令》
centos8 网站服务器 selinux设置
网上搜索,一般都是说关闭selinux,但是,个人不建议关闭
设置selinux给web目录读权限
chcon -v -R --type=httpd_sys_content_t /data/www/
设置selinux给web目录写权限
chcon -R -t httpd_sys_rw_content_t /data/www/
具体参看《centos8 nginx server root指向自定义目录如(/data/www),访问报403 404,所有文件用户组为root 权限为755》
设置完了,网站就可以运行了
linux网站基本安全设置
linux添加用户,修改用户密码,修改用户权限,设置root操作
添加一个名为 andyZhou的用户
useradd andyZhou
修改密码
passwd chenjiafa
给用户root权限
usermod -g root chenjiafa
网站平时用这个新增的用户登录,需要root权限,就su 切换
具体查看《linux添加用户,修改用户密码,修改用户权限,设置root用户操作》
禁止root ssh登录 修改默认端口
修改ssh配置文件
修改ssh登录端口
vim /etc/ssh/sshd_config
找到“#Port 22”,这一行直接键入“yyp”复制该行到下一行,然后把两行的“#”号即注释去掉,修改成:
#Port 22 Port 10086
大家修改端口时候最好挑10000~65535之间的端口号,10000以下容易被系统或一些特殊软件占用,或是以后新应用准备占用该端口的时候,却被你先占用了,导致软件无法运行。
禁止root ssh登录
PermitRootLogin no
增加ssh 普通登录用户
AllowUsers andyzhou
重启ssh服务
systemctl restart sshd
linux防火墙端口设置
linux 防火墙关闭某个端口
firewall-cmd --permanent --zone=public --remove-port=8080/tcp
linux 防火墙打开某个端口
firewall-cmd --permanent --add-port=10086/tcp
重新加载防火墙策略:
firewall-cmd --reload
查看防火墙端口开放情况
firewall-cmd --list-ports
linux虚拟内存设置
我的个人博客是1g小内存,mysql跑起来,经常崩溃。
free -m 查看内存,根据情况设置内存,一般虚拟机内存为物理内存的2倍。那么设置2g虚拟内存,命令如下
dd if=/dev/zero of=/opt/swap bs=1024 count=2048000 chmod 600 /opt/swap mkswap /opt/swap swapon /opt/swap
mysql创建新用户并授权,禁止root登录
下面几行sql,应该满足您的需求
-- 创建用户,以后用这个用户登录
CREATE USER 'userName' @ '访问限制' IDENTIFIED BY 'password';
-- 授权用户 ,给与数据的权限
GRANT ALL PRIVILEGES ON 数据库名称.表名称 TO 'userName'@'访问限制';
---修改用户密码(修改root密码)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newPassword';
-- 刷新用户权限
FLUSH PRIVILEGES;
网站cloudflare加速
阿里云,导出zone文件,然后clouefare 导出模板,然后复制粘贴即可
网上教程很多,比如《如何用CDN加速你的网站 – Cloudflare免费版详细使用教程》
这里提下需要注意的几个点
如果打开 Under Attack Mode ,总会出现一个5m 的启动页,而且现在免费用户,不能再customer page 里面配置
具体如何配置,如下:《cloudflare如何自定义5秒盾页面教程》
第二是,cloudflare Rocket Loader,国内被墙了,我的异步执行,插入的js 会被这个js阻塞。国内用户不管怎么样,还是关闭好。
参考链接:《cloudflare Rocket Loader中国使用者最好不要使用》
网站配好后,可以在本地镜像一个,传送门:《vmware14安装centos8》
先根据个人网站迁移步骤,整理这么多。以后再来整理文字
转载本站文章《服务器升级至centos8 网站配置-php与mysql从5.6升级到php7与msyql8》,
请注明出处:https://www.zhoulujun.cn/html/OS/Linux/LinuxDevops/8242.html
延伸阅读:
- linux centos8虚拟内存设置
- selinux限制下载远程图片与访问网络,get_headers与curl都false
- centos安装mysql教程
- Centos8安装nodejs: yum install Node.js最新版本或指定版本Version 18.
- centos7下的php7环境配置:centos7安装php7以及php5升级php
- centos 忘记 密码 如何实现登陆?
- linux查看软件安装目录……
- Linux如何打开端口和设置防火墙:firewall-cmd与iptables配置
- linux文件管理之shell命令汇总—从mkdir和touch发微文件管理
- 前端文件自动上传linux服务器,nginx文件权限设置—linux操作手
- exec与xargs范例详解:linux文件目录批量操作命令
- linux查看磁盘、查看文件夹大小、查看文件大小
- linux如何更改时区?为何没有北京(Asia/Beijing)时区
- ssh_exchange_identification: Connection closed by remote host
- ssh登录出现 Connection reset by peer
- Linux服务器同步文件夹方案:ssh rsync同步目录备份系统
- linux文件权限查看与设置,文件权限属性解析
- Linux 目录结构及目录作用
- mac与linux系统终端:解压缩与压缩命令行操作
- Unix目录结构的来历