前言
最近需要往服务器上堆多个web服务。架构类似百度,一个网站首页www.baidu.com .然后有其他子网站,比如 ai.baidu.com
于是用到了nginx
正文
nginx就不介绍了,随便百度一下就可以了,我这里用作代理服务器,也就是当需要访问网站首页时帮我转发到web服务A。而当我需要访问其子网站时,帮我转发到web服务B
网站A 监听端口8080
网站B 监听端口8081
配置nginx监听80,外部浏览器请求根据域名来访问A和B。
1 安装
sudo apt install nginx
2 配置nginx
首先关闭默认配置
当nginx启动时会发现80端口被占用,默认是nginx的首页。现在去掉它
编辑/etc/nginx/nginx.conf ,注释掉默认的sites-enabled/*,感兴趣的可以看看sites-enabled目录下的配置
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
#include /etc/nginx/sites-enabled/*;
重启nginx,此时80不再被占用
sudo systemctl restart nginx.service
配置监听80,根据server_name转发到不同站点
在http下添加server, 一个server对应一个代理
http{
#首页,直接配置静态网页
server{
listen 80;
server_name xxx.com;
location / {
root /home/ubuntu/xxx;
index index.html;
}
}
#子网站,配置转发
server{
listen 80;
server_name sub.xxx.com;
location / {
proxy_pass http://localhost:8081; # 转发
}
}
}
发现403 forbidden
打印一下nginx的错误日志:
cat /var/log/nginx/error.log
2020/10/19 18:44:04 [error] 20136#20136: *1 "/xxxx/index.html" is forbidden (13: Permission denied), client: 61.140.208.239, server: xxx.com, request: "GET / HTTP/1.1", host: "xxx.com"
发现这个文件没有权限,看了一下有读权限,然后是上网搜资料,最后发现nginx还要配置用户名,配置的user必须和启动的user一致
[解决] 修改 /etc/nginx/nginx.conf ,将第一行user 项 修改为root(我的启动是root)