概述
整理一下最近开发中遇到的小问题,解决了Mysql同步数据、跨域解决办法、Sftp传输文件在这里做一个节点,进行整理和总结。
Mysql 上传大sql文件策略
再实际的开发过程中会遇到迁移数据库,,数据库文件过大而导致的上传失败,这里提供了2个解决办法:
1.phpmyadmin方式
phpMyadmin 默认上传文件50M,如果超出了大小限制Nginx会抛出413 Request Entity Too Large
错误,phpMyadmin修改2个地方的配置可以解决,修改post_max_size
和upload_max_filesize
参数。
php -i | grep php.ini
post_max_size = 50M
upload_max_filesize = 50M
nginx 也需要配置,查看Nginx配置文件路径ps aux | grep nginx
,可以在server里也可以在http里,server的优先级比http高。
http
{
...
client_max_body_size 50m;
}
2.Mysql方式
如果使用的是Mysql的软件,比如nvaicat,就需要修改mysql的配置文件中的max_allowed_packet
的值,比你运行的sql文件大点,即可。
whereis my.conf
my: /etc/my.cnf
max_allowed_packet = 16M
跨域解决办法
同源策略是指浏览器的一种安全机制,用于限制来自不同源(即域、协议或端口)的文档或脚本之间的交互操作,同源策略也有助于防止跨站点脚本攻击(XSS)和跨站请求伪造攻击(CSRF)等网络安全问题。
所以说,解决办法的核心是设置允许跨域。
has been blocked by CORS policy: Request header field withcredentials is not allowed by Access-Control-Allow-Headers in preflight response.
跨域的解决办法有3种,分别从前端(vite)、服务端(PHP)、Nginx,原理是在服务端做一层反向代理,让Http请求避免直连请求。
前端vite设置反向代理,官网https://vitejs.dev/config/
代码语言:txt复制import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
export default defineConfig({
plugins: [vue()],
server:{
host:"localhost",
port:8080,
open: true,
proxy: {
// 代理服务器,遇/admin将target拼接到url上
'/admin': {
target: "http://www.baidu.com",
changeOrigin: true,
// rewrite: (p) => p.replace(/^/api/, '')
},
}
},
})
PHP服务端也可以加Header头解决
代码语言:txt复制header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']);
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, authKey, sessionId");
Nginx 允许跨域配置:
代码语言:text复制location / {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
}
远程服务器Sftp
在PHPstrom、或者是WebStrom中可以设置SFtp服务对服务器文件进行上传和下载,使用起来非常方便,设置路径Preferences->Build->Deployment
中添加服务。
步骤如下图:
有时候会发生没有权限操作,比如说我的文件的用户组和用户不是当前用户自己,当前用户是没有权限操作的,使用chown -R stark:stark [文件夹]
,就成功操作了。
Nginx 高性能配置PHP
Nginx有很多种配置PHP的方式,下面介绍unix方式和php-fpm方式,使用unix通信方式性能更优,原因是使用tcp层进行通信,减少了网络的往返开销,以此来提升性能。
代码语言:txt复制location ~ [^/].php(/|$)
{
try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
php-fpm方式:
代码语言:txt复制location ~ .php(.*)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U). .php)(/?. )$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
Nginx 隐藏index.php
代码语言:txt复制location / {
if (!-e $request_filename){
rewrite ^(.*)$ /index.php?s=$1 last; break;
}
}