这两种异常都应该去捕获
wget https://github.com/laruence/yac.git
#或者
git clone https://github.com/laruence/yac.git
cd yac
phpize
./configure --with-php-config=/opt/homebrew/opt/php@7.1/bin/php-config
make
make install
/opt/homebrew/opt/php@7.1
是要替换成你自己机器上PHP的安装目录make install
之后会返回yac.so所在的目录,同一台机器的php扩展一般都会在这个目录下extension=yac.so
如果你是第一次安装PHP的扩展,那可能改需要修改extension_dir
的指向目录,这个目录也就是上面make install
之后会返回的目录,不然会报找不到yac.so文件,例如:
extension_dir = "/opt/homebrew/lib/php/pecl/20160303"
可以通过php -i | grep ini
找到php.ini的路径
只添加扩展还是无法使用Yac的,还需要增加一些配置
还是在php.ini文件中增加yac的一些配置,可以根据自己的需要调整参数
[yac]
yac.enable = 1
yac.enable_cli = 1
yac.keys_memory_size=4M
yac.values_memory_size = 64M
service php-fpm reload
php -m
查看到yac,说明扩展安装成功,可以在代码中使用了。
我们本地使用wamp Server配置虚拟主机的时候,在访问URL的时候总是在domain后面带上入口文件index.php。这导致url多上几个字符串观看上很不舒服,而且拼写url的时候需要多敲几个。
在项目中入口文件的同级目录下建一个.htaccess,文件内容如下:
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
# RewriteRule ^(.*)$ index-dev.php/$1 [QSA,PT,L]
RewriteRule ^(.*)$ index-dev.php [L,E=PATH_INFO:$1]
</IfModule>
<IfModule mod_deflate.c>
AddOutputFilter DEFLATE html xml php js css text/html text/plain
</IfModule>
在httpd-vhost.conf文件下配置虚拟主机的时候添加重写规则:
<VirtualHost *:80>
#开启重写
RewriteEngine on
#哪些文件路径不定义重写,css和js等文件是放在public路径下,所以在视图文件中以/public开头的url不重写路径(注意'/'需要使用'\’来进行转义)
RewriteCond $1 !^(index\.php|\/public)
#重写规则:可以不需要输入index.php来进行访问
RewriteRule ^(.*)$ /index.php/$1 [QSA,PT,L]
ServerName dev.api.com
ServerAlias dev.api.com
DocumentRoot "D:/projects/api"
<Directory "D:/projects/api/">
DirectoryIndex index.php index.html
Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
打开主库的配置文件my.ini(不同于linux环境下的my.cnf),该文件在在mysql的安装目录下。我的是C:\*****\bin\mysql\mysql5.7.26\my.ini
。在my.ini
的最下面可以看到[mysqld]
,在它下面添加主库的配置
所以
[mysqld]
default_authentication_plugin=mysql_native_password
port = 3306
#以下是新增配置
server-id=1 #配置唯一server-id,主库和从库不能重复
log-bin=mysql-bin #开启二进制日志
binlog-do-db=test #同步的数据库
binlog-ignore-db=mysql #不需要同步的数据库
重启主库mysql
查看主库的server-id以及其他配置信息
打开Navicat Premium连接到主库,切换到命令行模式(快捷键:F6),分别执行下面的sql语句:
show variables like 'server_id';
show master status;
为从库创建用于同步的帐号(一般不会使用root帐号)
我是直接使用Navicat Premium来创建帐号
用户名:slave
密码:123456
并且在服务器权限里选中全部的权限
打开从库的配置文件my.ini
,同样在my.ini
的[mysqld]
下面添加主库的配置
[mysqld]
default_authentication_plugin=mysql_native_password
port = 3306
#下面是新加配置
server-id=2 #和主库不一致
#master-host=10.1.100.93 #主库ip
#master-user=slave #主库用户名
#master-password=123456 #主库密码
#master-port=3306 #主库端口号
#master-connect-retry=60
replicate-do-db=test #需要同步的表
replicate-ignore-db=mysql #不需要同步的表
重启从库MySQL
注意: 可以看到配置中我注释了master-*
这部分的配置,是因为MySQL版本从5.1.7以后开始就不支持“master-*”类似的参数。
如果不注释这块配置则会导致从库MySQL在重启的时候报错:
unknown variable 'master-host=10.1.100.93'
该部分配置已改为执行命令的方式进行配置:
change master to master_host='110.1.100.93',
master_port=3306,master_user='slave',
master_password='123456',
master_log_file=’mysql-bin.000001’,
master_log_pos=1437;
其中master_log_file
和master_log_pos
的配置值是在主库中执行下面命令后可以查看:
show master status;
启动
执行命令启动从库同步:
start slave;
查看是否成功
在从库命令行执行(Navicat Premium命令行下执行该命令会报错):
show slave status\G
可以看到主从已经成功打通
在主库的test
库中建表user
CREATE TABLE `user`(
`id` int(11) NOT NULL AUTO_INCREMENT ,
`name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '用户名' ,
`age` int(3) UNSIGNED NOT NULL COMMENT '年龄' ,
PRIMARY KEY (`id`)
);
查看从库
可以发现从库在没有执行上面的sql语句的情况下,也生成了user
表:
同样:在主库中添加数据,也会自动同步到从库
redis
响应的快慢是性能好坏判断的直接体现。
redis
响应的快慢和它所在的服务器的硬件配置有很大的关系,不同的服务器上的redis
的响应快慢都是不同的,那么如何判断这台服务器的redis
的响应是否变慢呢?
那就需要知道这台redis
服务器的基线性能
。
redis.2.8.7
之后的版本中,redis-cli
命令提供了–intrinsic-latency
选项,可以用来监测和统计测试期间内的最大延迟,那么这个延迟就可以作为redis
的基线性能
参考。测试时长可以通过指定–intrinsic-latency
选项的参数来控制(一般情况下120s
足够监测到最大延迟了)。
执行:
redis-cli --intrinsic-latency 120
我个人机器上的测试结果如下:
# redis-cli --intrinsic-latency 120
Max latency so far: 1 microseconds.
Max latency so far: 14 microseconds.
Max latency so far: 20 microseconds.
Max latency so far: 23 microseconds.
Max latency so far: 92 microseconds.
Max latency so far: 97 microseconds.
Max latency so far: 4947 microseconds.
Max latency so far: 5475 microseconds.
876664269 total runs (avg latency: 0.1369 microseconds / 1368.83 nanoseconds per run).
Worst run took 39998x longer than the average latency.
可以看出这台机器的最大延迟5475
微秒,那么就可以判断这台机器的基线性能
为5475
微秒。
可以以此来判断redis
的响应是否变慢。
一般认为运行时延迟达到基线性能的2倍以上则可判定
redis
变慢了。
说明: 测试基线性能
时,最好是登陆到redis
服务器上执行命令,在客户端上执行命令会有网络延迟的因素,导致基线性能
不准确。
nginx服务器:
10.1.100.90:80 #使用的是默认端口
集群服务器
10.1.100.94:8094
10.1.100.95:8095
10.1.100.96:8096
10.1.100.97:8097
说明:nginx服务器为统一对外访问的入口,集群服务器为业务逻辑程序入口。当然也可以使用集群服务器中的一台服务器作为nginx服务器对外访问。这里分开使用,配置方法是一样的。
打开nginx配置文件。我这里是单独建了一个vhosts
文件夹(/***/nginx-1.17.1/conf/vhost
),专门用来存放项目的配置文件。但需要在/***/nginx-1.17.1/conf/nginx.conf
配置文件的末尾添加一句配置才能将vhosts
下的配置文件引入并生效。
添加的配置:
include vhost/*.conf;
新建配置文件/***/nginx-1.17.1/conf/vhost/10.1.100.90.conf
文件配置如下:
upstream sample {
server 10.1.100.94:8094 weight=1;
server 10.1.100.95:8095 weight=2;
server 10.1.100.96:8096 weight=2;
server 10.1.100.97:8097 weight=2;
}
server{
listen 80;
server_name 10.1.10.90;
access_log logs/90.access.log;
error_log logs/90.error.log;
large_client_header_buffers 4 16k; # 读取大型客户端请求头的缓冲区的最大数量和大小
client_max_body_size 300m; #设置nginx能处理的最大请求主体大小。
client_body_buffer_size 128k; #请求主体的缓冲区大小。
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_buffer_size 64k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
location / {
uwsgi_send_timeout 600; # 指定向uWSGI传送请求的超时时间,完成握手后向uWSGI传送请求的超时时间。
uwsgi_connect_timeout 600; # 指定连接到后端uWSGI的超时时间。
uwsgi_read_timeout 600; # 指定接收uWSGI应答的超时时间,完成握手后接收uWSGI应答的超时时间。
index index.php index.html index.htm;
proxy_pass http://sample;
proxy_redirect default;
}
}
重启后访问http://10.1.100.90
就会按照1:2:2:2的比例依次分别转发到4台集群服务器对应的访问地址上。
有时候想要某个链接访问时只被转发到4台集群服务器上的某一台上时,该如何配置呢?
场景如下:有很多的视频只存放在10.1.100.94
这台服务器上,要想通过访问nginx服务器的统一对外链接来访问到10.1.100.94
这台服务器的视频,而不是把视频在每个服务器上都放套,那就需要这个对外链接只转发到该服务器上。
好的,开始配置:
10.1.100.94
这台服务器上的视频访问入口为http://10.1.100.94:8888
http://10.1.10.90/video/
http://10.1.10.90/video/
时nginx将其转发到http://10.1.100.94:8888
即可location ^~/video/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://video/;
}
那么10.1.100.90.conf
的完整配置如下:
upstream sample {
server 10.1.100.94:8094 weight=1;
server 10.1.100.95:8095 weight=2;
server 10.1.100.96:8096 weight=2;
server 10.1.100.97:8097 weight=2;
}
upstream video {
server 10.1.100.94:8888;
}
server{
listen 80;
server_name 10.1.10.90;
access_log logs/90.access.log;
error_log logs/90.error.log;
large_client_header_buffers 4 16k; # 读取大型客户端请求头的缓冲区的最大数量和大小
client_max_body_size 300m; #设置nginx能处理的最大请求主体大小。
client_body_buffer_size 128k; #请求主体的缓冲区大小。
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_buffer_size 64k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
location / {
uwsgi_send_timeout 600; # 指定向uWSGI传送请求的超时时间,完成握手后向uWSGI传送请求的超时时间。
uwsgi_connect_timeout 600; # 指定连接到后端uWSGI的超时时间。
uwsgi_read_timeout 600; # 指定接收uWSGI应答的超时时间,完成握手后接收uWSGI应答的超时时间。
index index.php index.html index.htm;
proxy_pass http://sample;
proxy_redirect default;
}
location ^~/video/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://video/;
}
}
总结:使用Nginx做反向代理的时候,可以直接把请求原封不动的转发给下一个服务。设置proxy_pass请求只会替换域名,如果要根据不同的url后缀来访问不同的服务,便可以如此设置。比如访问http://10.1.10.90/video/
,想要根据url后缀的/video/
去访问http://10.1.100.94:8888/
的服务时,上面的方法就完美的实现了这样的需求。并且在http://10.1.10.90/video/
后面加任何的后缀转发时都会自动拼在http://10.1.100.94:8888/
后面。
原文地址:http://www.architecy.com/archives/481
这牵扯到了nginx和php的通信模式,上面所列的就是这两种,一种是利用系统本身socket的,一种是利用tcp协议的
UNIX Domain Socket不经过网络,只是在系统内部进行通信,适用于php和nginx都装在同一台linux服务器上
tcp通信协议的也就是fastcgi_pass模式的既适用于php和nginx都装在同一台linux服务器上,同时又适用于不在同一台服务器上的,一般在同一个局域网中,也就是127.0.0.1的意义了
当然我们在真正的php搭建服务器环境的时候,具体用那种,就要看php-fpm.conf中使用的是哪种了
tcp方式:
php-fpm.conf: listen = 127.0.0.1:9000
nginx.conf: fastcgi_pass 127.0.0.1:9000;
UNIX Domain Socket方式:
php-fpm.conf: listen = /tmp/php-fpm.sock
nginx.conf: fastcgi_pass unix:/tmp/php-fpm.sock;
在我们真正实例中多数都是装在同一台服务器上,所以选择UNIX Domain Socket是比较合适的选择,因为这样可以避免数据传输经过tcp层造成导致TIME_WAIT连接过多的问题。
1.1 TCP Socket(本地回环127.0.0.1)方式的数据传输:
1.2 TCP Socket(Nginx和PHP-FPM位于不同服务器)的数据传输:
2.1 UNIX Domain Socket方式的数据传输:
原文地址:https://www.cnblogs.com/liubaoqing/p/12176017.html
yum groupinstall 'Development Tools'
yum install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses curl gdbm-devel db4-devel libXpm-devel libX11-devel gd-devel gmp-devel expat-devel xmlrpc-c xmlrpc-c-devel libicu-devel libmcrypt-devel libmemcached-devel
cd /usr/local/src
wget https://www.php.net/distributions/php-7.4.4.tar.bz2
tar jxvf php-7.4.4.tar.bz2
cd php-7.4.4
groupadd www
useradd -g www www
./configure --prefix=/usr/local/php --with-config-file-path=/etc --with-fpm-user=www --with-fpm-group=www --with-curl --with-freetype-dir --enable-gd --with-gettext --with-iconv-dir --with-kerberos --with-libdir=lib64 --with-libxml-dir --with-mysqli --with-openssl --with-pcre-regex --with-pdo-mysql --with-pdo-sqlite --with-pear --with-png-dir --with-jpeg-dir --with-xmlrpc --with-xsl --with-zlib --with-bz2 --with-mhash --enable-fpm --enable-bcmath --enable-libxml --enable-inline-optimization --enable-mbregex --enable-mbstring --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-sysvshm --enable-xml --enable-zip --enable-fpm
先删除旧版本
yum remove -y libzip
下载编译安装
wget https://nih.at/libzip/libzip-1.2.0.tar.gz
tar -zxvf libzip-1.2.0.tar.gz
cd libzip-1.2.0 ./configure
make && make install
yum install libsqlite3x-devel -y
yum install oniguruma-devel -y
yum install -y epel-release
configure: error: off_t undefined; check your library configuration
off_t 类型是在 头文件 unistd.h中定义的,
在32位系统 编程成 long int ,64位系统则编译成 long long int ,
在进行编译的时候 是默认查找64位的动态链接库,
但是默认情况下 centos 的动态链接库配置文件/etc/ld.so.conf里并没有加入搜索路径,
这个时候需要将 /usr/local/lib64 /usr/lib64 这些针对64位的库文件路径加进去。
echo '/usr/local/lib64
/usr/local/lib /usr/lib /usr/lib64'>>/etc/ld.so.conf
ldconfig -v
cp /usr/local/lib/libzip/include/zipconf.h /usr/local/include/zipconf.h
make && make install
执行完安装命令后php7.4就已经安装在到了/usr/local/php目录下了
查看版本
/usr/local/php/bin/php -v
添加环境变量
vim /etc/profile
添加到最后
PATH=$PATH:/usr/local/php/bin
export PATH
更新环境变量
source /etc/profile
查看版本
php -v
cp /usr/local/src/php-7.4.4/php.ini-production /etc/php.ini
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
cp /usr/local/src/php-7.4.4/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
启动php-fpm
/etc/init.d/php-fpm start
或者
service php-fpm start
本文为转载文章,对我帮助很大,所以转载记录一下。如需删除请及时联系
说明:本文为转载内容
原文地址:https://mp.weixin.qq.com/s/evyse2RD_v25MI52umPReg
原文地址:https://mp.weixin.qq.com/s/JQbOqv55zXA0TTHPohb9jA
本文由 桶哥 授权 饭米粒 发布,转载请注明本来源信息
我选择的是国内镜像下载jdk,避免还要注册登录oracle帐号和下载速度慢等问题。
国内镜像(华为云):
https://repo.huaweicloud.com/java/jdk/8u151-b12/
一路下一步,中间选择自己要安装的目录即可。
在cmd中查看java的版本号
java-1.8.0已安装成功,并且也不用再配置环境变量。
下载地址:https://www.jenkins.io/download/
下载完成后是一个jenkins.msi
的安装文件,直接双击打开,一直next
即可。
中间可以修改自己想要安装到的目标目录和Jenkins启动的端口号。
我的连接地址是:http://localhost:8091
安装完成后,会自动打开浏览器,刚开始浏览器可能会出现无法连接的情况,在当前页面刷新一下即可。等待初始化,会出现下面的页面:
找到密码文件,打开复制密码,输入进去,点击继续
即可。
接下来就是根据自己的需要安装插件:
很多时候我们为了安全考虑,需要隐藏我们环境的一些版本号,如:server、X-Powered-By
修改httpd.conf 设置
ServerSignature Off
ServerTokens Prod
修改nginx.conf 在http里面设置
server_tokens off;
修改 php.ini 文件 设置
expose_php = Off
在程序的入口文件中加一行代码,就可以展示为你想展示的信息
header('X-Powered-By: 浩天说');