nginx的安装和启动
- 下载nginx的tar包, 并解压;
- 执行configure命令;
- 执行make && make install命令;
- 在安装目录的sbin目录下, 执行./nginx命令启动(注意关闭防火墙)
- 访问主机ip即可看到页面
- 使用./nginx -s reload重新启动, ./nginx -s stop停止;
简单的代理配置
location / {
# root html;
# index index.html index.htm;
proxy_pass http://192.168.1.6:8081;
}
一些其他的配置
传给被代理服务器参数
1. proxy_set_header Host $host; #代理主机地址
2. proxy_set_header X-Real-IP $remote_addr; #远程请求地址
3. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #所有代理机器地址
4. proxy_connect_timeout 10ms; #访问超时时间
负载均衡配置
配置
upstream tomcat {
server 192.168.1.6:8080;
server 192.168.1.10:8080;
}
location / {
#root html;
#index index.html index.htm;
proxy_pass http://tomcat;
}
可以对以上进行设置
server 192.168.1.6:8080 max_fails=2 fail_timeout=60s;
表示: 访问失败后重试两次, 之后60s内不再访问;
负载均衡的算法
- 轮询算法: 后端宕机后会自动退出轮询, 不被轮询, 上面的配置;
- ip_hash: 根据IP地址进行hash, 相同的地址会发送到相同的服务上;
upstream tomcat {
ip_hash;
server 192.168.1.6:8080;
server 192.168.1.10:8080;
}
- 权重: 根据权重不同访问代理服务器;
server 192.168.1.6:8080 weight=1
nginx动静分离
静态资源配置
location - .*\.(js|css|png|jpg){
root static-resource;
expire 1d; #添加缓存
}
压缩
支持Gzip压缩, 在http中配置
gzip on; #打开压缩
gzip_min_length 5k; #申请的缓存空间
gzip_comp_level 3; #压缩的等级
gzip_types application/javascript image/jpeg; # 压缩的资源类型
gzip_buffers 4 32k; #表示以4*32k单位获取;
gzip_vary on; #启用应答头"Vary: Accept-Encoding"
防盗链
保证资源只能被当前服务访问, 防止被其他服务使用, 产生额外的流量;
location - .*\.(js|css|png|jpg){
valid_referers none block 192.168.1.10; #表示只能10服务访问
if($invalid_referer) {
return 404;
}
root static-resource;
expire 1d; #添加缓存
}
跨域访问
什么是跨域访问: 比如有两台服务器10和11, 10的请求要去访问11的api, 这就是跨域访问, 按常理来说这是可以访问的, 但是浏览器设置了不能进行跨域访问, 这是浏览器行为, 因此现在流行的前后端分离要解决跨域访问问题才能实现;
配置:
location / {
#root html;
#index index.html index.htm;
proxy_pass http://tomcat;
add_header 'Access-Control-Allow-Origin' '*'; #允许所有的服务
add_header 'Access-Control-Allow-Methods' 'GET,POST,DELETE'; #允许的方法类型
add_header 'Access-Control-Allow-Header' 'Content-Type,*'; #允许访问的资源
}
日志处理
http里面
日志格式
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;
Nginx的线程模型(待补充)
使用的是多进程+多路复用机制
nginx高可用方案
- 使用keepalive+nginx方式, 解决单点故障问题(master和backup);
两个节点只有master可以使用, 如果master挂掉, 则启动备机
- keepalived安装
1. 下载tar包, 解压;
2. 使用该命令安装./configure --prefix=/usr/local/keepalive/ --sysconf=/etc
3. make && make install
4. cp /usr/local/keepalive/keepalived/keepalived/etc/init.d/keepalived /etc/init.d #设置开机启动
5. chkconfig --add keepalived
6. service keepalived start|stop|status #使用三种命令开启|停止|检查状态
7. 配置文件路径:/keepalived/keepalived/etc/keepalived
配置: 只需要配置virtual_ipaddress(虚拟ip)和virtual_server(虚拟ip), real_server的ip即可
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.16
}
}
virtual_server 192.168.200.16 80 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.1.10 80 {
weight 1
TCP_CHECK {
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
备用机配置, 只要将real_server修改为备用机ip, state修改为BACKUP即可;
8. 配置脚本:
vrrp_instance VI_1上面
vrrp_script nginx_status_process {
script "脚本路径"
user root
interval 3
}
vrrp_instance VI_1内
track_script {
nginx_status_process
}
9. 脚本内容
#!bin/sh
A = 'ps -C nginx --no-header |wc -l' #检查nginx的命令
if [ $A -eq 0 ]
then
service keepalived stop
fi
10. service keepalived restart
Openresty
就是nginx+lua脚本, 安装方法和nginx相同, 内置了nginx, 可以使用来做网关;
hello world
location / {
default_type text/html;
content_by_lua_block {
ngx.say('hello world');
}
}
启动nginx访问即可
HTTPS请求的配置
获取证书
# 创建服务器私钥
openssl genrsa -des3 -out server.key 1024
# 创建签名请求的证书(csr); csr核心内容是一个公钥
openssl req -new -key server.key -out server.csr
# 去除使用私钥是的口令验证
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
# 标记证书使用私钥和csr
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
#配置文件
server {
listen 80;
server_name localhost;
ssl on;
ssl_certificate /crt文件路径;
ssl_certificate_key /server.key文件路径;
location / {
...
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。