Nginx
nginx 是什么?
nginx 安装 ---linux
安装
# yum install nginx
查看所在位置
# whereis nginx
默认位置存在于: /etc/nginx
启动
# systemctl start nginx.service
关闭
# systemctl stop nginx.service
查看状态
# systemctl status nginx.service
热部署:不停机更新配置
# nginx -s reload
检查nginx配置文件
#nginx -t
查看进程
# ps -ef | grep nginx
查看运行中的端口
# netstart -tunlp
查看运行服务所在目录 proc目录下是所有运行服务以对应PID命名的文件夹
cd /proc
找到对应的PID文件夹 cd命令进入
cwd 则是对应的服务所在文件夹
nginx 配置文件 nginx.conf
主要分为三块
全局块,主要定义nginx全局运行参数
# 从开始到events
# 主要配置,工作进程,默认为1,建议无需要不修改,需要修改则根据服务器的CPU核心数配置
worker_processes 1;
events 块
events{
# 单个工作进程可以允许同时建立外部连接的数量数字越大,能同时处理的连接越多
worker_connections 1024;
#设置指标,一:内存,二::操作系统级别的“进程最大可打开文件数”。
}
http块:又分为 全局块和server块(实际使用中修改最多的位置)
http{
所有内容
}
http块---全局块
server块以外的内容
例如:
include mime.types;
server_names_hash_bucket_size 512;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 50m;sendfile on;
tcp_nopush on;keepalive_timeout 60;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;server_tokens off;
access_log off;
http块---server块
server{
listen 80;
server_name loclhost;
location ~ / {
proxy_pass http://127.0.0.1:8082;
}
}又分为server 全局块和 location 块
全局快主要配置监听、服务名称、访问的文件夹、ssl等
location 主要用于转发、代理
http反向代理
常规配置
server{
listen 80;
server_name www.123.com;
location / {
proxy_pass http://www.baidu.com:8082;
}
}请求链接携带/test转发:www.123.com/test ---> http://www.baidu.com:8082/test;
server{
listen 80;
server_name www.123.com;
location /test {
proxy_pass http://www.baidu.com:8082;
}
}请求链接携带 /test/ 转发:
www.123.com/test/abdc/123.do ---> http://www.baidu.com:8082/abdc/123.do;
server{
listen 80;
server_name www.123.com;
location /test/ {
proxy_pass http://www.baidu.com:8082;
}
}注意 location中匹配设置
http负载均衡
http块全局块中定义
upstream myserver{
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
负载方式有三种:
1 轮询:默认,请求均衡的分布在对应的服务上
2 配置权重:权重数值越大访问次数越多
server中配置 :server: 127.0.0.1:8081 weight =1;
3:ip_hash:每个用户固定访问一个服务,解决session共享问题
直接在upstream中配置
upstream myserver{
ip_hash;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
4:fair : 根据服务器的响应时间来处理负载,响应越快分配的越多
直接在upstream中配置
upstream myserver{
server 127.0.0.1:8081;
server 127.0.0.1:8082;
fair;
}
server{
listen 80;
server_name www.123.com;
location ~ / {
proxy_pass myserver;
}
}
静态访问配置
server{
listen 80;
server_name www.123.com;
location ~ / {
proxy_pass http://myserver;
}# 访问静态文件:http://localhost/static/index.js
location /static {
root /opt/project/upload/;
}# 访问静态文件:http://localhost/image/123.png
location /image {
root /opt/project/image/;
}
}location中 配置alias和root
alias:主要配置在location 中,路径要以 / 结束,root则不用,
root 可以配置在全局块中定义
路径区别
root是:root路径+location路径
alias是:使用alias路径替换location路径
location中的 autoindex on;
如果配置了在访问的时候会把对应文件夹下所有文件及文件夹以列表的形式展示出来
配置无后缀下载:
location /apple-app-site-association { root /etc/nginx/files/; } files下存放apple-app-site-association同名文件,PC端访问异常,APP移动终端可下载
java 配合 nginx 获取IP
location 中配置
proxy_pass http://localhost:8080/; #设置请求头,获取客户端IP地址 ,X-Real-IP proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;java 代码:
getRequest().getHeaders().getFirst("X-Real-IP");
nginx 高可用 主从模式
使用:keepalived 工具进行配置
安装
# yum install keepalived
配置文件在/etc/keepalived 下keepalived.conf
! Configuration File for keepalived
# 全局块
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 # 核心配置
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER # MASTER 主服务器 BACKUP 从服务器
interface eth0 # 绑定网卡
virtual_router_id 51 # 主备机参数值必须一致
priority 100 # 主机大、从机小。优先级
advert_int 1 # 发送心跳时间,默认是1秒一次
authentication { # 校验方式
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { # 虚拟IP地址,可通过该配置进行服务访问
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
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
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
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
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
retry 3
delay_before_retry 3
}
}
}