1 Https协议的SSL证书配置
开发同事发给我一小段nginx配置,加到服务器上之后,执行nginx -s reload时,出现报错:
nginx: [emerg] unknown directive “ ” in /usr/local/nginx/conf/vhost/XXX.conf:53。于是去网上搜索解决方法,查到一篇相似报错处理文档https://stackoverflow.com/questions/19165976/nginx-emerg-unknown-directive-in-etc-nginx-sites-enabled-example-com3,但是没能解决,于是又看了下报错,发现报错提示好像是多了个空格,于是查看XXX.conf,发现在新加的配置后面确实多了一个空格,是因为我从微信聊天记录复制时在配置末尾多复制了一个空格导致的,于是修改后重新执行nginx -s reload就没有嘛报错了。
server {
listen 443;
#填写绑定证书的域名
server_name www.domain.com;
ssl on;
#网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
root /var/www/www.domain.com;
index index.html index.htm;
#证书文件名称
ssl_certificate 1_www.domain.com_bundle.crt;
#私钥文件名称
ssl_certificate_key 2_www.domain.com.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
index index.html index.htm;
}
}
server {
listen 80;
#填写绑定证书的域名
server_name www.domain.com;
#把http的域名请求转成https
rewrite ^(.*)$ https://$host$1 permanent;
}
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 443 ssl;
server_name www.ljj5200.cn;
root /var/www/www.ljj5200.cn;
index index.html index.htm;
ssl_certificate /etc/ssl/1_ljj520.cn_bundle.crt;
ssl_certificate_key /etc/ssl/2_ljj520.cn.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
index index.html index.htm;
}
}
server {
listen 80;
server_name www.ljj5200.cn;
rewrite ^(.*)$ https://$host$1 permanent;
}
}
特别注意吭:结尾不能有空格。
2 WebSocket协议的代理配置
X.1 WebSocket协议原理
因为webSocket协议是基于http协议升级的(见下图),所以可以使用nginx反向代理webSocket。
从这张图片上可以看出,webSocket连接的建立是在http协议的基础上。
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com
熟悉HTTP的童鞋可能发现了,这段类似HTTP协议的握手请求中,只是多了几个东西。
Upgrade: websocket
Connection: Upgrade
这个就是Websocket的核心了,告诉Apache、Nginx等服务器:我发起的是Websocket协议。
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
首先Sec-WebSocket-Key 是一个Base64 encode的值,这个是浏览器随机生成的,告诉服务器:泥煤,不要忽悠窝,我要验证尼是不是真的是Websocket助理。然后服务器会返回下列东西,表示已经接受到请求, 成功建立Websocket啦!
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat
这里开始就是HTTP最后负责的区域了,告诉客户,我已经成功切换协议啦~
Upgrade: websocket
Connection: Upgrade
依然是固定的,告诉客户端即将升级的是Websocket协议。至此,HTTP已经完成它所有工作了,接下来就是完全按照Websocket协议进行了。
X.2 wss走nginx的443端口再转发到websocket服务器的8080端口
微信小程序中使用wss协议的时候不能设置端口,只能使用默认的443端口。我的https已经监听了443端口,webSocket再去监听443,肯定不行啊。可以使用nginx反向代理到nginx服务器的其它端口解决冲突。服务器的证书是老大配置好的,我就直接用了。需要的传送门。
在nginx配置文件的service
节点中添加如下配置
location /wss {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Real-IP $remote_addr;
}
解释一下参数:/wss:
这个是随便起的,告诉Nginx要代理的url,现在我的设置为wss
,当我访问的我的服务器https://abc.com/wss
时,Nginx会把我的请求映射到本机的8888端口。proxy_pass:
要代理到的url,我的代理到本机的8888端口。proxy_http_version
:代理时使用的 http版本。proxy_set_header Upgrade:
把代理时http请求头的Upgrade
设置为原来http请求的请求头,wss协议的请求头为websocket
proxy_set_header Connection:
因为代理的wss协议,所以http请求头的Connection
设置为Upgrade
proxy_set_header X-Real-IP:
给代理设置原http请求的ip,填写$remote_addr
即可
至于websocket协议的response的参数,在反向代理的时候不用管。
到这里,Nginx反向代理webSocket的配置就完成了,重启Nginx,用websocket连接试试,在原来wss地址的地方填写wss://abc.com/wss
。如果websocket成功连接,说明Nginx反向代理websocket已经成功了
X.3 ws走nginx的80端口再转发到websocket服务器的8080端口
1、下载ngin服务器并配置升级协议转发到websocket服务器
location /wss {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Real-IP $remote_addr;
}
2、编写websocket服务器代码并运行在8080端口,传送门
3、测试nginx转发请求到websocket服务端是否开发完毕,传送门(也可以直接访问websocket服务器如ws://127.0.0.1:8080)
3 资源上传/下载/域名映射
X.1 避免浏览器自动播放文件
MIME:http模块全局配置中配置
有时对于图片、视频,浏览器会视能力,自动为用户显示或播放。这主要是由于Web服务器在返回文件本身数据的同时,返回了一些特殊的MIME类型,比如:image/jpeg(JPEG图像),application/pdf(PDF文档),video/mpeg(MPEG动画)。这些MIMIE类型实际上是告诉浏览器,文件数据到底是什么,这样浏览器就能更好的为用户展示数据。现在像图片、pdf、甚至是视频基本都是可以直接在浏览器中展示和播放的。
include mime.types; #文件扩展名与文件类型映射表
有时,需要用户下载文件而不是直接播放,而Nginx在默认配置下,会根据文件的后缀来匹配相应的MIME类型,并写入Response header,导致浏览器播放文件而不是下载,这时需要通过配置让Nginx返回的MIME类型为下面这个类型:
在location模块配置
location /download/ {
types { }
default_type application/octet-stream;
}
这个类型会让浏览器认为响应是普通的文件流,并提示用户下载文件。
这样当Url路径中包含/download/
时,MIME类型会被重置为application/octet-stream
。另外,nginx自带的MIME类型映射表保存在conf/mime.types
中。
X.2 文件上传大小限制
有的时候后端的Web-Server提供文件上传的服务,但是如果前端使用Nginx做反向代理时,会出现文件无法上传的问题,这可能是由于Ngxin默认对客户端请求的body的限制。因为,默认情况下Nginx对客户端请求的大小限制是1m,而上传的文件往往超过1m。可以通过修改如下配置项,来放宽这个限制:
client_max_body_size 10m;
将这个值设置为0,可以取消这个限制。这个配置项可以用在http
, server
, location
配置节中。
X.3 下载文件重命名
通常情况下,为了保证用户上传的文件在服务器的文件系统中不至于重名,一般会将文件名修改成guid后保存,并在数据库中保持guid与文件名的映射。此时,如果使用Nginx来提供对这些用户文件的下载功能的话,文件下载到用户浏览器,会以文件的guid名作为文件名,这显然是用户不想看到的。可以考虑用这个方案。
假设我们有一个文件的原始文件名为test.txt,对应的guid文件名是21EC2020-3AEA-1069-A2DD-08002B30309D.txt,文件的虚拟路径是/download/
使用服务器端编程语言,在输出的html中使用如下链接提供文件的下载:
<a href="/download/21EC2020-3AEA-1069-A2DD-08002B30309D.txt?n=test.txt" target='_blank'>下载test.txt</a>
可以看到,将原始文件名以QueryString的方式带在请求中,这样可以在Nginx端,利用$arg_name
变量来取到这个QueryString的值,从而重写response header:
add_header Content-Disposition "attachment; filename=$arg_n";
这会在response header中加入如下键值:
Content-Disposition: "attachment; filename=test.txt";
经测试,无论是IE还是Chrome都可以支持这个header。
X.4 一个IP多个域名
如果只有一个公网IP,但是网站功能需要划分为多个不同的子网站或者子域名,可以用Nginx来搭建反向代理来“复用”IP资源。假设有如下几个域名都是abc.com这个主域的:
www.abc.com
image.abc.com
video.abc.com
1. 首先在DNS出注册这3个域名同时指向同一个IP,Nginx作为前端的web服务器,让所有访问这个IP地址80端口的请求全部指向Nginx
2. 然后,配置Nginx,根据域名将请求转发转发给内网的上游服务器,例如下面的配置:
server {
listen 80;
server_name www.abc.com;
location / {
proxy_pass http://192.168.1.10;
}
}
server {
listen 80;
server_name image.test.com;
location / {
alias /var/www/image;
}
}
server {
listen 80;
server_name video.abc.com;
location / {
proxy_pass http://192.168.1.10:8081/video;
}
}
在上述配置中,将三个域名分发给了不同的模块处理:
www.abc.com 分发给上游的http://192.168.1.10服务器处理
image.abc.com 则直接映射到了Nginx本机的一个目录
video.abc.com 分发给上游的http://192.168.1.10:8081/video服务器处理(video是上游web-server的某虚拟目录)
X.5 上游服务器超时
Nginx作为反向代理的时候,如果上游服务器处理时间过长的话,有时会返回504网关超时,从nginx的错误日志看出如果是upstream timed out,就表示是上游服务器处理时间过长,Nginx认为服务超时。Nginx在请求上游服务器时默认的超时时间为1分钟,可以通过调整proxy_read_timeout属性增加这个超时时间
proxy_read_timeout 180s;
4 反向代理
X.1 实现过程
X.2 对外开放端口
案例一:
访问nginx服务器上的静态资源然后跳转到tomcat去拿数据
案例二:
根据不同的路径将请求转发到对应的tomcat里面去。
5 动静分离
注意:访问路径为底层文件名,root为外层文件名,否则访问不生效。
列出文件夹里面的数据信息
6 负载均衡
负载:就是Nginx接受请求
均衡:Nginx将收到的请求按照一定的规则分发到不同的服务器进行处理
X.1 策略
Nginx目前支持3种自带负载均衡策略,还有2种常用的第三方策略。
RR(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
这里我配置了2台服务器,当然实际上是一台,只是端口不一样而已,而8081的服务器是不存在的,也就是说访问不到,但是我们访问http://localhost 的时候,也不会有问题,会默认跳转到http://localhost:8080 具体是因为Nginx会自动判断服务器的状态,如果服务器处于不能访问(服务器挂了),就不会跳转到这台服务器,所以也避免了一台服务器挂了影响使用的情况,由于Nginx默认是RR策略,所以我们不需要其他更多的设置。
权重
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
ip_hash
上面的2种方式都有一个问题,那就是下一个请求来的时候请求可能分发到另外一个服务器,当我们的程序不是无状态的时候(采用了session保存数据),这时候就有一个很大的很问题了,比如把登录信息保存到了session中,那么跳转到另外一台服务器的时候就需要重新登录了,所以很多时候我们需要一个客户只访问一个服务器,那么就需要用ip_hash了,ip_hash的每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
以上5种负载均衡各自适用不同情况下使用,所以可以根据实际情况选择使用哪种策略模式,不过fair和url_hash需要安装第三方模块才能使用.
X.2 实战
7 集群搭建
问题:防止nginx宕机的过程叫高可用的实现。
实现过程
表示网卡进行了虚拟绑定
keepalived.conf配置文件详解
! Configuration File for keepalived
#1、全局的
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL # 就是linux127.0.0.1和LVS_DEVEL进行了域名的绑定
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
#2、脚本的
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2 # 检测脚本执行的间隔
weight 2 # 数值为复数时当主服务器挂掉 该主机不当主服务器 而是当从服务器
}
#3、虚拟ip的
vrrp_instance VI_1 {
state MASTER # 表示该服务器是主服务器还是备服务器,如果是备用服务器需要填写BACKUP
interface eth0 # 将虚拟ip绑定到你本机的哪个网卡
virtual_router_id 51 # 主备机的一个标识
priority 100 # 主备优先级,值越大优先级越高,一般主设100,从设90
advert_int 1 # 心跳,每隔几秒钟检查该主机是否还活着
# 校验权限的方式
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟ip是什么,可写多个
virtual_ipaddress {
192.168.200.16
192.168.200.17
192.168.200.18
}
}
virtual_server 192.168.200.100 443 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.201.100 443 {
weight 1
SSL_GET {
url {
path /
digest ff20ad2481f97b1754ef3e12ecd3a9cc
}
url {
path /mrtg/
digest 9b3a0c85a887a256d6939da88aabd8cd
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
virtual_server 10.10.10.2 1358 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
sorry_server 192.168.200.200 1358
real_server 192.168.200.2 1358 {
weight 1
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.200.3 1358 {
weight 1
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334c
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334c
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
virtual_server 10.10.10.3 1358 {
delay_loop 3
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.200.4 1358 {
weight 1
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.200.5 1358 {
weight 1
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
8 Centos7安装NG
X.1 安装
1.安装Pcre。
2.安装zlib和opensll
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
3.编译安装nginx
进入解压缩后的目录
(1).配置
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
可能出现的错误
错误为:./configure: error: the HTTP rewrite module requires the PCRE library.
安装pcre-devel解决问题
yum -y install pcre-devel
然后删除解压的nginx1.6,重新解压在配置make参数。
(2).make && make install或进入解压后的nginx目录执行./configure && make install,此时会在/usr/local目录中创建nginx文件,安照下面的使用启动即可。
(3).出现新的nginx文件表明编译安装成功

X.2 配置



X.3 使用
cd进入到local/nginx目录下可以看到四个目录:
其中:
conf -----配置文件
html -----网页文件
logs -----日志文件
sbin -----主要二进制程序
1.查看版本号
2.启动
3.关闭
4.重新加载
5.查看状态
ps -aux | grep nginx
X.4 常用编译选项说明
configure 脚本确定系统所具有一些特性,特别是 nginx 用来处理连接的方法。然后,它创建 Makefile 文件。
configure 支持下面的选项:
1)目录属性
--prefix=<path> - Nginx安装路径。如果没有指定,默认为 /usr/local/nginx。
--sbin-path=<path> - Nginx可执行文件安装路径。只能安装时指定,如果没有指定,默认为<prefix>/sbin/nginx。
--conf-path=<path> - 在没有给定-c选项下默认的nginx.conf的路径。如果没有指定,默认为<prefix>/conf/nginx.conf。
--pid-path=<path> - 在nginx.conf中没有指定pid指令的情况下,默认的nginx.pid的路径。如果没有指定,默认为 <prefix>/logs/nginx.pid。
--lock-path=<path> - nginx.lock文件的路径,默认为<prefix>/logs/nginx.lock
--error-log-path=<path> - 在nginx.conf中没有指定error_log指令的情况下,默认的错误日志的路径。如果没有指定,默认为 <prefix>/logs/error.log。
--http-log-path=<path> - 在nginx.conf中没有指定access_log指令的情况下,默认的访问日志的路径。如果没有指定,默认为 <prefix>/logs/access.log。
--user=<user> - 在nginx.conf中没有指定user指令的情况下,默认的nginx使用的用户。如果没有指定,默认为 nobody。
--group=<group> - 在nginx.conf中没有指定user指令的情况下,默认的nginx使用的组。如果没有指定,默认为 nobody。
--builddir=DIR - 指定编译的目录
2)模块
--with-rtsig_module - 启用 rtsig 模块
--with-select_module --without-select_module -允许或不允许开启SELECT模式,如果 configure 没有找到更合适的模式,比如:kqueue(sun os),epoll (Linux kenel 2.6+), rtsig(实时信号)或者/dev/poll(一种类似select的模式,底层实现与SELECT基本相 同,都是采用轮训方法) SELECT模式将是默认安装模式
--with-poll_module --without-poll_module - Whether or not to enable the poll module. This module is enabled by default if a more suitable method such as kqueue, epoll, rtsig or /dev/poll is not discovered by configure.
--with-http_ssl_module -开启HTTP SSL模块,使NGINX可以支持HTTPS请求。这个模块需要已经安装了OPENSSL,在DEBIAN上是libssl
--with-http_realip_module - 启用 ngx_http_realip_module
--with-http_addition_module - 启用 ngx_http_addition_module
--with-http_sub_module - 启用 ngx_http_sub_module
--with-http_dav_module - 启用 ngx_http_dav_module
--with-http_flv_module - 启用 ngx_http_flv_module
--with-http_stub_status_module - 启用 "server status" 页
--without-http_charset_module - 禁用 ngx_http_charset_module
--without-http_gzip_module - 禁用 ngx_http_gzip_module. 如果启用,需要 zlib 。
--without-http_ssi_module - 禁用 ngx_http_ssi_module
--without-http_userid_module - 禁用 ngx_http_userid_module
--without-http_access_module - 禁用 ngx_http_access_module
--without-http_auth_basic_module - 禁用 ngx_http_auth_basic_module
--without-http_autoindex_module - 禁用 ngx_http_autoindex_module
--without-http_geo_module - 禁用 ngx_http_geo_module
--without-http_map_module - 禁用 ngx_http_map_module
--without-http_referer_module - 禁用 ngx_http_referer_module
--without-http_rewrite_module - 禁用 ngx_http_rewrite_module. 如果启用需要 PCRE 。
--without-http_proxy_module - 禁用 ngx_http_proxy_module
--without-http_fastcgi_module - 禁用 ngx_http_fastcgi_module
--without-http_memcached_module - 禁用 ngx_http_memcached_module
--without-http_limit_zone_module - 禁用 ngx_http_limit_zone_module
--without-http_empty_gif_module - 禁用 ngx_http_empty_gif_module
--without-http_browser_module - 禁用 ngx_http_browser_module
--without-http_upstream_ip_hash_module - 禁用 ngx_http_upstream_ip_hash_module
--with-http_perl_module - 启用 ngx_http_perl_module
--with-perl_modules_path=PATH - 指定 perl 模块的路径
--with-perl=PATH - 指定 perl 执行文件的路径
--http-log-path=PATH - Set path to the http access log
--http-client-body-temp-path=PATH - Set path to the http client request body temporary files
--http-proxy-temp-path=PATH - Set path to the http proxy temporary files
--http-fastcgi-temp-path=PATH - Set path to the http fastcgi temporary files
--without-http - 禁用 HTTP server
--with-mail - 启用 IMAP4/POP3/SMTP 代理模块
--with-mail_ssl_module - 启用 ngx_mail_ssl_module
--with-cc=PATH - 指定 C 编译器的路径
--with-cpp=PATH - 指定 C 预处理器的路径
--with-cc-opt=OPTIONS - Additional parameters which will be added to the variable CFLAGS. With the use of the system library PCRE in FreeBSD, it is necessary to indicate --with-cc-opt="-I /usr/local/include". If we are using select() and it is necessary to increase the number of file descriptors, then this also can be assigned here: --with-cc-opt="-D FD_SETSIZE=2048".
--with-ld-opt=OPTIONS - Additional parameters passed to the linker. With the use of the system library PCRE in FreeBSD, it is necessary to indicate --with-ld-opt="-L /usr/local/lib".
--with-cpu-opt=CPU - 为特定的 CPU 编译,有效的值包括:pentium, pentiumpro, pentium3, pentium4, athlon, opteron, amd64, sparc32, sparc64, ppc64
--without-pcre - 禁止 PCRE 库的使用。同时也会禁止 HTTP rewrite 模块。在 "location" 配置指令中的正则表达式也需要 PCRE 。
--with-pcre=DIR - 指定 PCRE 库的源代码的路径。
--with-pcre-opt=OPTIONS - Set additional options for PCRE building.
--with-md5=DIR - Set path to md5 library sources.
--with-md5-opt=OPTIONS - Set additional options for md5 building.
--with-md5-asm - Use md5 assembler sources.
--with-sha1=DIR - Set path to sha1 library sources.
--with-sha1-opt=OPTIONS - Set additional options for sha1 building.
--with-sha1-asm - Use sha1 assembler sources.
--with-zlib=DIR - Set path to zlib library sources.
--with-zlib-opt=OPTIONS - Set additional options for zlib building.
--with-zlib-asm=CPU - Use zlib assembler sources optimized for specified CPU, valid values are: pentium, pentiumpro
--with-openssl=DIR - Set path to OpenSSL library sources
--with-openssl-opt=OPTIONS - Set additional options for OpenSSL building
--with-debug - 启用调试日志
--add-module=PATH - Add in a third-party module found in directory PAT
9 lua + ng 操作redis
X.1 lua
centos自带lua无需安装,但win需要安装
变量和循环
函数与条件控制
X.2 OpenResty
OpenResty封装了nginx,提供了许多lua插件,所以将其当ng使用,因为它结合lua具有业务能力
X.3 获取请求参数
X.4 OR向Tomcat发请求
请求先发送到ng自己然后再反向代理到tm
X.6 OR向Redis发请求
X.7 ng本地缓存
将数据缓存再ng本地,秒杀敏感性的数据不要放在这里
10 nginx: [error] open() “/usr/local/nginx/logs/nginx.pid“ failed (2: No such file or directory)
启动Nginx时候报错:nginx: [error] open() “/usr/local/nginx/logs/nginx.pid” failed (2: No such file or directory)
X.1 情况一
nginx.conf的nginx.pid被注释了,进入nginx.conf目录编辑
sudo vi /usr/local/nginx/conf/nginx.conf
把注释取消掉,再重新启动Nginx就OK了
sudo nginx -s reload
X.2 情况二
没有指定配置目录
输入来使用指定nginx.conf文件的方式重启nginx(首先保证上面第一种情况的pid没有被注释,否则可能前两次能打开,但是以后还是会报错的)
sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf