nginx配置文件
打开 nginx. conf 配置文件,从整体结构可以看出,该配置文件主要由以下几部分组成,主要的配置都在service和loaction中, 并且对于嵌套块(如 http、 server、 location)中的指令,执行的顺序为从外到内依次执行,内层块中的大部分指令会自动 获取外层块指令的值作为默认值
main
events {...}
http {
server {
location {...}
}
}
静态资源代理
server{
listen 80
server_name www.myblog.com
location / {
root /opt/html/;
index index.html index.htm;
}
}
www.myblog.com/index.html会到/opt/html下查找index.html静态资源
关键字root和alias的区别
root意思就是根据root路径+locationn路径找到资源;alias意思就是用alias路径替换对应的location路径内容。
#root配置
#IP_Address/images/tmp.jpg = /usr/local/static/images/tmp.jpg
location /images/ {
root /usr/local/static/
}
#alias配置
#IP_Address/images/1.jpg = /usr/local/static/images/tmp.jpg
location /images/ {
alias /usr/local/static/images/
}
当用了正则表达式,proxy_pass后面不能加URL_part
location ~ /test-proxy.html$ {
proxy_pass http://www.myblog.com/index;#这是错误操作,不能在接/index
}
端口转发
upstream default{
server :8888;
}
#Demo2负载均衡池
upstream blog{
server :8888;
}
#默认端口转发到
server {
listen 80
server_name www.域名.com;
access_log logs/index.log;
error_log logs/index.error;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://default;
}
}
#Demo2端口转发
server {
listen 80;
server_name blog.域名.com;
access_log logs/movie.log;
error_log logs/movie.error;
#将所有请求转发给demo_pool池的应用处理
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://blog;
}
}
我的web程序是8888端口,而通过域名访问默认是80端口,所以需要监听80端口并转发到我网站程序所在的端口,“server_name blog.域名.com;”中的blog字段需要在域名解析的后台进行配置
动静分离
server {
listen 10000;
server_name www.myblog.com;
#拦截后台请求,myblog.com的请求代理到testblog.com
location / {
proxy_pass http://www.testblog.com;
proxy_set_header X-Real-IP $remote_addr;
}
#拦截静态资源
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ {
root /opt/static;
}
}
反向代理
反向代理(Reverse Proxy)方式是指以代理服务器外网方式来接受internet上的连接请求,然后将请求转发给内网的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器
server{
listen 80;
server_name www.myblog.com
location / {
proxy_pass http://192.168.30.80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
负载均衡
负载均衡其实是基于反向代理向后台不同服务器进行资源调度和分配,因此nginx负载均衡是特殊的反向代理
负载均衡基本配置
upstream backserver {
server 192.168.3.80
server 192.168.3.81
}
- upstream:创建节点服务器组的关键字,必须有;
- blog:节点服务器组的名字,必须有,可自定义名字;
- server:关键字,后面可加IP或者域名或者IP:端口,端口默认80;
- weight:权重,数值越大被分配的请求越多。默认为1
server {
listen 80
server_name www.myblog.com
location / {
proxy_pass http://backserver;
index index.html index.php;
}
}
负载均衡策略配置
1.轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除,适用于两台服务器配置基本相同
2.权重
upstream backserver {
server 192.168.3.80 weight=1;
server 192.168.3.81 weight=2;
}
按比例进行分配, 192.168.3.80分配一次, 192.168.3.81分配2次
3.ip_hash(静态调度算法)
每个请求按客户端IP的hash结果分配,当新的请求到达,先将客户端IP通过哈希算法哈希出一个值,在随后的分配客户端请求中,客户IP的哈希值只要相同,就会被分配到同一台服务器,可以解决session的问题。
upstream backserver {
ip_hash;
server 192.168.1.207;
server 192.168.1.206;
}
参考文章
https://segmentfault.com/a/1190000018493330
https://my.oschina.net/xinson/blog/3012614
websocket下的nginx配置
在在线安装接口自动化管理平台的时候前端一直报ws 404
websocket使用ws的方式连接,如果用ip+端口是可以正常连接的,把ip和端口换成域名后就报404(域名是二级域名)
通过在源码中添加log发现,ws已经关闭了
server{
listen 80;
server_name yapi.tanjiexia.com;
access_log logs/yapi.log;
error_log logs/yapi.log;
location /{
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://yapi;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "upgrade";
}
}
添加nginx修改之后ws正常连接,走的onsuccess。。。
Nginx同域名下部署多个单页面应用
转载自:https://segmentfault.com/a/1190000018319774
Nginx常用命令
nginx -t 检查配置文件是否有语法错误
yxl@iZuf6iuhf2ikZ:/etc/nginx/sites-enabled$
yxl@iZuf6iuhf2ikZ:/etc/nginx/sites-enabled$ sudo nginx -t
nginx: [warn] conflicting server name "" on 0.0.0.0:8888, ignored
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
nginx -s stop
nginx -s reload