nginx

中间件技术栈

Mac中编译Nginx 1.17

背景

使用Mac的开发者大多数的时候通过 brew 命令安装各类软件,比如 PHP、Python、Nodejs,Nginx 也不例外。

默认情况下Nginx安装在/usr/local/Cellar/nginx,通过brew link nginx加软连接到/usr/local/bin/nginx,虽然这样完全满足开发且符合 Mac 软件的管理,但是却不方便移植(比如想给不懂开发的用户一键部署部署的应用包,做私有化部署的同学应该对此不陌生)。

从源码编译NGINX程序比安装预编译的安装包要灵活很多,可以添加特定的模块(来自NGINX官方或者第三方的,比如给 Fastdfs 提供 HTTP 访问文件能力的 fastdfs-nginx 模块),当然自己编译源码拉取的可以是已修复 bug 和新增特性的最新分支。

编译

依赖

  • PCRE——支持正则表达式。 是 Nginx 的核心和重写模块的所需依赖库。
1
2
wget https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.bz2
tar zxf pcre-8.43.tar.bz2

阅读剩下更多

默认配图
中间件技术栈

Wordpress站点的Nginx服务配置https

生成证书

参考《SSL证书生成》,生成适合于自己的免费证书。也可购买商业SSL证书。

如果只想生成CSR,用CSR在CA机构换取CRT证书,可以执行下面命令即可:

1
openssl req -new -nodes -newkey rsa:2048 -keyout server.key -out server.csr

配置Nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# 配置80端口跳转到443端口
server {
listen 80;
server_name www.abc.zyx;
# rewrite ^ https://$server_name$request_uri permanent;
rewrite ^(.*)$ https://$host$1 permanent;
}
# 配置WordPress的https服务
server {
#listen 80;
#listen [::]:80;
listen 443 ssl;
server_name www.abc.zyx;
charset utf-8;

ssl_certificate ssl/server.crt;
ssl_certificate_key ssl/server.key;
ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:CAMELLIA256-SHA:CAMELLIA128-SHA256";
ssl_session_cache shared:SSL:20m;
ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

location / {
root /var/www/html/abc;
index index.html index.htm index.php;
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
try_files $uri $uri/ /index.php?$args;
}
#rewrite /wp-admin$ $scheme://$host$uri/ permanent;
#try_files $uri $uri/ /index.php?q=$uri&$args;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;

location = /50x.html {
root /var/www/html;
}

location ~ \.php$ {
root /var/www/html/abc;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
include fastcgi.conf;
try_files $uri =404;
}

location ~ /\.ht {
deny all;
}
}

注意:ssl_protocols配置项,不添加TLSv1会导致部分IE浏览器打不开,如果加上TLSv1用站长工具检测会提示PCI DSS 不合规。

重新加载配置文件:nginx -s reload

如果是阿里云ECS服务器,需要在控制台的安全组中增加入网的443端口,具体配置可以参照其他的配置。

如果这时候https还不能访问,则需要查看Ubuntu服务器是否开启了443端口,如果无,则需要开启。

查看443端口是否开启:

1
iptables -L -n | grep 443

开启443端口,并让其生效:

1
2
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
iptables-save

WordPress后台改成https访问

主题支持改动

如果主题中有修改网站URL的入口,则直接在admin管理后台修改即可。

如果使用的 WP Editor.md 插件,也需要修改思维导图库资源路径,一般情况下可以使用//替换http://,这样资源就可以根据站点的scheme自动切换了。

SQL UPDATE

1
2
3
4
5
6
7
update scat_posts
set post_content = replace(post_content, 'http://www.abc.xyz', '//www.abc.xyz')
where post_content like '%http://www.abc.xyz%';

update scat_posts
set guid = replace(guid, 'http://www.abc.xyz', 'https://www.abc.xyz')
where guid like '%http://www.abc.xyz%';

通过找到当前主题下的 function.php 文件

1
2
3
4
5
6
7
function replacehttp($content){
if( is_ssl() ){
$content = str_replace('http://www.abc.xyz', 'http://www.abc.xyz', $content);
}
return $content;
}
add_filter('the_content', 'replacehttp');

wp-config.php文件中添加

1
2
define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);

阅读剩下更多

默认配图
中间件技术栈

部署分布式HA FastDFS集群

FastDFS

FastDFS的作者余庆在其 GitHub 上是这样描述的:“FastDFS is an open source high performance distributed file system. It’s major functions include: file storing, file syncing and file accessing (file uploading and file downloading), and it can resolve the high capacity and load balancing problem. FastDFS should meet the requirement of the website whose service based on files such as photo sharing site and video sharing site” ,意思说,FastDFS是一个开源的高性能分布式文件系统。其主要功能包括:文件存储、文件同步和文件访问(文件上传和文件下载),它可以解决高容量和负载平衡问题。FastDFS应满足基于照片共享站点和视频共享站点等文件的网站的服务要求。

FastDFS 有两个角色:跟踪器(Tracker)和存储器(Storage)。Tracker 负责文件访问的调度和负载平衡。Storage 存储文件及其功能是文件管理,包括:文件存储、文件同步、提供文件访问接口。它还管理元数据,这些元数据是表示为文件的键值对的属性。TrackerStorage 节点都可以由一台或多台服务器构成。这些服务器均可以随时增加或下线而不会影响线上服务,当然各个节点集群至少需要一台服务 Running。注意,其中 Tracker 集群中的所有服务器都是对等的(P2P),可以根据服务器的压力情况随时增加或减少。

阅读剩下更多

默认配图
中间件技术栈

nginx的proxy_cache_lock研究

proxy_cache_lock官方解释

Nginx.org 官方的 Maxim Dounin 对于proxy_cache_lock的答复

Hello!

On Mon, Jun 30, 2014 at 11:10:52PM -0400, Paul Schlie wrote:

being seemingly why proxy_cache_lock was introduced, as you initially suggested.
Again: responses are not guaranteed to be the same, and unless
you are using cache (and hence proxy_cache_key and various header
checks to ensure responses are at least interchangeable), the only
thing you can do is to proxy requests one by one.

If you are using cache, then there is proxy_cache_key to identify
a resource requested, and proxy_cache_lock to prevent multiple
parallel requests to populate the same cache node (and
“proxy_cache_use_stale updating” to prevent multiple requests when
updating a cache node).

In theory, cache code can be improved (compared to what we
currently have) to introduce sending of a response being loaded
into a cache to multiple clients. I.e., stop waiting for a cache
lock once we’ve got the response headers, and stream the response
body being load to all clients waited for it. This should/can
help when loading large files into a cache, when waiting with
proxy_cache_lock for a complete response isn’t cheap. In
practice, introducing such a code isn’t cheap either, and it’s not
about using other names for temporary files.


Maxim Dounin
http://nginx.org/

阅读剩下更多

默认配图
PHP是最好的语言

Mac 下 Nginx、PHP、MySQL 和 PHP-fpm 的安装和配置

杂七杂八的杂

Mac下搭建MNPM环境是每个使用者mac的phper必备的技能。一般都是找到新工作入职的第一天做的事情--配置环境。

如上,今天入职的,配置开发环境。公司配备的硬件设备很屌,15年产macbook pro笔记本一台(13寸),配置了8GB DDR3内存,2.7GHz core i5处理器,120GB的闪存。当然了,没我自己买的配置高,哈哈~~

安装 Mac 的包管理器 - homebrew

home-brew是什么?先这样说吧,home-brew与OS X就像nodes与npm,java与maven(或者gradle),php与composer,apt-get与Ubutun,yum与centos,还有其他等等吧,都是宿主的开发工具或包的依赖管理。

安装Homebrew之前,先安装xcode命令行工具,安装成功后,打开xcode的应用,查看Xcode是否为最新,如果不是最新的请在App Store中升级Xcode。

阅读剩下更多

默认配图
返回顶部