zlib官网
cd /usr/local/src
wget http://zlib.net/zlib-1.2.11.tar.gz
tar -xzvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure
make && make install
zlib官网
cd /usr/local/src
wget http://zlib.net/zlib-1.2.11.tar.gz
tar -xzvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure
make && make install
当下 (2019-04-20)最新的稳定版本的 nginx 版本是 1.14.2。下边来进行编译安装该版本,使其支持 http2 以及 TLS1.3 还有 Brotli 。 都是好东西,可以慢慢去了解。
### 先更新包,软件,系统内核
yum update
安装 nginx 源码进行编译,编译依赖 gcc 环境,需要安装gcc: yum install gcc-c++
PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。
yum install pcre pcre-devel
nginx 使用 zlib 对 http 包的内容进行 gzip。可是,不是用 Brotli 么。两个都装,装了也没事。gzip 编译安装来个。如果不编译,使用 yum
安装,版本达不到要求。
# 版本没要求可以这样
yum install zlib zlib-devel
先安装 cmake
https://blog.vini123.com/289
再安装 zlib
https://blog.vini123.com/299
再安装 bzip2
https://blog.vini123.com/300
最后安装 libzib
https://blog.vini123.com/290
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。
cd /opt
git clone https://github.com/eustas/ngx_brotli.git
cd ngx_brotli
git submodule update --init --recursive
可以看这里: https://blog.vini123.com/302
我们创建一个新的用户组和用户来运行服务,这样可以把nginx和root分开,保证nginx不具备root权限。但是,我们并不希望nginx成为一个真实的可以登陆到远程进行操作的用户,所以,我们并不给它创建home目录,在useradd的时候,用-M参数:
groupadd www
useradd -g www -M www
-g参数为nginx用户指定了一个组。-M参数保证其不自动生成home目录。
但通过上面的用户创建之后,www 用户可以通过设置一个密码登陆到服务器,这个不是我们想要的,我们禁用它的 ssh 登陆权限.禁止用户登陆也很方便,只需要修改配置文件中有关用户和用户组的信息即可。
vi /etc/passwd
找到www,将后面的/bin/bash改为/sbin/nologin即可。
官网:http://nginx.org/en/download.html 当前最新稳定版本 1.14.2
cd /usr/local/src
wget http://nginx.org/download/nginx-1.14.2.tar.gz
tar -xzvf nginx-1.14.2.tar.gz
cd nginx-1.14.2
配置编译
./configure \
--user=www \
--group=www \
--prefix=/alidata/service/nginx \
--pid-path=/alidata/service/nginx/run/nginx.pid \
--with-http_stub_status_module \ ## 监控模块,nginx自带,但默认不安装
--with-threads \
--with-file-aio \
--with-pcre-jit \
--with-http_ssl_module \ ## 开启 HTTPS 支持
--with-http_v2_module \ ## 开启 HTTP/2
--with-http_gzip_static_module \ ## 开启 GZip 压缩
--with-http_sub_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_realip_module \
--with-http_addition_module \
--with-stream \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
--with-stream_realip_module \
--with-http_slice_module \
--with-pcre \
--with-openssl=/usr/local/src/openssl-1.1.1b/ \ ## 指定单独编译入 OpenSSL 的源码位置
--with-openssl-opt=enable-tls1_3 \ ## 开启 TLS 1.3 支持
--add-module=/usr/local/src/ngx_brotli/ ## 编译入 ngx_BroTli 扩展
如果有问题,将这些配置写成一行。没有问题会提示:
Configuration summary
+ using threads
+ using system PCRE library
+ using OpenSSL library: /usr/local/src/openssl-1.1.1b
+ using system zlib library
nginx path prefix: "/alidata/service/nginx"
nginx binary file: "/alidata/service/nginx/sbin/nginx"
nginx modules path: "/alidata/service/nginx/modules"
nginx configuration prefix: "/alidata/service/nginx/conf"
nginx configuration file: "/alidata/service/nginx/conf/nginx.conf"
nginx pid file: "/alidata/service/nginx/run/nginx.pid"
nginx error log file: "/alidata/service/nginx/logs/error.log"
nginx http access log file: "/alidata/service/nginx/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"
好了,现在开始编译安装。
make && make install
安装完毕后,启动 nginx
/alidata/server/nginx/sbin/nginx
ps -ef|grep nginx
# 查看编译的模块
/alidata/service/nginx/sbin/nginx -V
切换到 /lib/systemd/system/
目录,创建 nginx.service
文件 vi nginx.service
编辑 nginx.service
。
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/alidata/service/nginx/sbin/nginx
ExecReload=/alidata/service/nginx/sbin/nginx reload
ExecStop=/alidata/service/nginx/sbin/nginx quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
保存,并退出。再执行 systemctl enable nginx.service
激活重启自启动功能
systemctl enable nginx.service
systemctl start nginx.service #启动nginx
systemctl stop nginx.service #结束nginx
systemctl restart nginx.service #重启nginx
curl 127.0.0.1
查看欢迎页面。或输入外网 ip,如果外网 ip 访问不到,可能是 80端口没开放。去开放端口。比如去阿里云添加安全组,再重启 nginx。
owasp 安全测试,其中一项就是关于请求头中的 servers 信息和 x-powered-by 信息要隐藏。该怎么隐藏呢。servers 对应的是 nginx 或 apache 的信息,x-powered-by 可能是 php 的版本号。
如下图:
用户,可以很方便的看到你服务器环境的版本信息。想要隐藏只需下边这样操作即可。
nginx
vim nginx.conf
# http 里边添加下边的设置
server_tokens off;
然后重启 nginx 。 ../sbin/nginx -s reload
# 找到 php.ini 的位置
php -i|grep php.ini
vim php.ini
# 设置下边的值即可。即将 on 改成 off
expose_php = Off
然后重启 php 。 /etc/init.d/php-fpm restart
想做聊天这样的app或页面,就会使用到长连接。websocket 是一种方式。服务方可以用 nodejs 这些。对于 php,还是使用 workman 或 swoole 比较方便。这里就记录下 laravel 框架使用 swoole 的过程。
http://pecl.php.net/package/swoole
当前,最新版本是 4.31。所有一切都是新的,服务器是新的,装的环境也是最新的。所以没有心理压力,都用最新的。
cd /usr/local/src
wget http://pecl.php.net/get/swoole-4.3.1.tgz
tar -xzvf swoole-4.3.1.tgz
cd swoole-4.3.1
phpize
# 对 ssl 的支持。这个还是比较重要的
./configure --enable-openssl
make && make install
make test
vim /alidata/service/php/etc/php.ini
# 尾部追加
extension=swoole.so
# 重启 php
/etc/init.d/php-fpm restart
# 查看扩展
# php -m|grep swoole
以前,还需要写中间件来处理邮箱是否验证过了。5.7 开始,Laravel 自带了邮箱验证的相关字段和功能。
以此基础,从零开始吧。
生成注册登录
php artisan make:auth
修改 User 模型,使其实现 MustVerifyEmail
接口
class User extends Authenticatable implements MustVerifyEmail
启用与邮箱验证相关的路由(验证邮箱页面、重发验证邮件页面等),修改 routes/web.php
Auth::routes(['verify' => true]);
Laravel 自带了一个名为 verified 的中间件,如果一个未验证邮箱的用户尝试访问一个配置了 verified 中间件的路由,Laravel 就会提示该用户邮箱未激活。修改路由,加了一个中间件,测试看看。
Route::get('/', 'PageController@home')->name('home')->middleware('verified');
访问首页,发现会跳转到验证邮箱的页面了。证明邮箱验证生效。
看看 users 表,我们发现和以前比,多了一个 email_verified_at
字段。
我们可以临时使用 MailHog 来模拟邮箱激活。
MailHog 是 Homestead 自带的一个组件,可以很方便地调试发送邮件。直接使用端口号 8025
就可以访问到。那么,怎么让其接受到邮件呢。修改 .env
文件。将 host 和 port 修改成下边的即可。
MAIL_HOST=127.0.0.1
MAIL_PORT=1025
修改完毕,刷新 mailhog
页面。点击首页链接,会跳转到验证页面。发送验证,查看邮箱,点击激活。再访问首页是不是就可以访问了。再看看数据库,会发现 email_verified_at
字段以及有值(日期时间)了。
Laravel Mix 一款前端任务自动化管理工具,使用了工作流的模式对制定好的任务依次执行。Mix 提供了简洁流畅的 API,让你能够为你的 Laravel 应用定义 Webpack 编译任务。Mix 支持许多常见的 CSS 与 JavaScript 预处理器,通过简单的调用,你可以轻松地管理前端资源。
使用 Mix 很简单,首先你需要使用以下命令安装 npm 依赖即可。我们将使用 Yarn 来安装依赖,在这之前,因为国内的网络原因,我们还需为 Yarn 配置安装加速:
MVP 是 Minimum Viable Prodcut (最小化可行性产品)的简称
常用快捷键,记住几个就好很多了。在 mac 中, cmd 对应 command,alt 对应 option。
cmd + p 快速打开文件或查找打开文件
control + ' (同~) 打开关闭控制台
shift+cmd+k 删除一行
shift+alt+down 向下复制一行
shift+alt+up 向上复制一行
cmd + d 显示选中的内容
alt + up 向上移动一行
alt + down 向下移动一行
cmd + b 侧边栏的隐藏与显示
cmd + alt + n 创建文件
打开 vscode,打开控制面板(⇧⌘P
),输入 shell command,在提示里看到 Shell Command: Install 'code' command in PATH,运行它就可以了。
然后就可以了。
code . # 打开当前文件夹项目
code readme.md # 打开当前文件
Auto Rename Tag
自动重命名配对的HTML / XML标签
Auto Close Tag
自动添加 HTML/XML 的闭合标签
Color-Highlight
在编辑器中高亮显示颜色。
Color Picker
代码的颜色选择器。
Guides
代码的标签对齐线。
Bracket Pair Colorizer
让括号拥有独立的颜色,易于区分。可以配合任意主题使用。
vetur
vue项目语法高亮、智能感知、Emmet等。
Laravel Blade Snippets
Laravel blade 代码片段和语法高亮支持 Visual Studio。
PHP Intellisense Crane
Crane 是 Visual Studio Code 的生产力增强扩展,提供了 PHP 代码的自动完成。它具有零依赖性,并可以极大程度地工作于任何规模的项目里。它仍在开发中,可能存在 Bug 或缺失某些功能。。
Laravel goto view
从controller进入view。
php intelephense
php 语法提示工具。
advanced-new-file
快捷创建文件、文件夹。
Bootstrap 4 & Font awesome snippets
bootstrap4和font awesome 快速引用和代码生成。。
虽然,mariadb 可以替代 mysql,但某些函数,mariadb 是没有的。比如,ST_Distance_Sphere
。当然,mariadb 拥有的函数 mysql 也不一定有。
请参考:
https://mariadb.com/kb/en/library/function-differences-between-mariadb-102-and-mysql-57/
https://mariadb.com/kb/en/library/mysqlmariadb-spatial-support-matrix/
看着 ST_Distance_Sphere 很好用,却不能用。那也没办法,可以试试 ST_DISTANCE
函数。
eg:
``
select ST_Distance_Sphere(ST_GeomFromText('Point(115.452081 30.486021)'), position) as distance from ball_invitations
select (ST_Distance(GeomFromText('Point(115.452081 30.486021)'), position) / 0.0111195) as distance from ball_invitations
``
https://mariadb.com/kb/en/library/st_distance/
https://dev.mysql.com/doc/refman/5.7/en/spatial-convenience-functions.html
http://www.innomysql.com/mysql_gis_lbs/
https://blog.csdn.net/zhouzhiwengang/article/details/53612481