部署web项目大多情况会用到nginx,以前项目都是从网上copy下来的,也没怎么理解,今天正式上手nginx,从安装到基本使用。
使用环境 CentOS7。
1. 安装nginx
构建 yum repository,新建文件 /etc/yum.repos.d/nginx.repo,内容:
[nginx]name=nginx repo
baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/
gpgcheck=0
enabled=1
其中baseurl的OS根据自己情况改成 rhel 或者 centos;OSRELEASE 改成版本号如 6 或 7。
centos7的 baseurl=http://nginx.org/packages/centos/7/$basearch/。
保存退出后执行安装:
sudo yum install nginx
2. nginx的启动与关闭
sudo systemctl start nginx # 启动nginxsudo systemctl stop nginx # 关闭nginx
sudo systemctl restart nginx # 重启nginx
sudo systemctl status nginx # 查看nginx状态
启动nginx后,打开浏览器输入ip,看到nginx的index页面则表示成功。
如果访问不了检查下防火墙端口:
# 添加80和443端口firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload
3. 配置nginx
nginx配置文件默认为 nginx.conf,通常文件路径为 /usr/local/nginx/conf, /etc/nginx(centos7环境), 或 /usr/local/etc/nginx.
nginx常用命令:
nginx -s stop # 快速停止nginx -s quit # 优雅停止
nginx -s reload # 重新加载配置文件
nginx -s reopen # 重开日志文件
通过kill结束nginx:
nginx.pid 通常在路径 /usr/local/nginx/logs 或 /var/run(centos7环境).
ps -ax | grep nginxkill -s QUIT 1628
静态服务器配置:
新建2个文件夹:/data/www 和 /data/images
在nginx.conf文件中默认已经配置了server块,注释掉然后新建一个server块,内容:
server {location / {
root /data/www;
}
location /images/ {
root /data;
}
}
上面配置监听标准80端口。url以 /images 开头在 /data/images 中查找,找不到则 404。其它 url 均在 /data/www 中查找。url 会先匹配 /images,再匹配 / 。
在 /data/www 中放入 index.html 文件,/data/images 中放入一张图片 1.jpg。
刷新配置:
nginx -s reload
访问浏览器 ip/images/1.jpg 和 ip/index.html
如果访问不了查看日志文件,日志文件通常在 /usr/local/nginx/logs 或 /var/log/nginx(centos7环境).
4. 代理服务
注释上面 server 块,新建2个 server 块:
server{listen 5000; # 监听 5000 端口,下面不指定默认监听 80 端口
root /data/real; # 此时root配置在外,location不拥有自己的root。代理转发时实际位置
location / {
}
}
# 除了请求指定点图片文件外,所有请求转发到 http://localhost:5000
server{
location / {
proxy_pass http://localhost:5000;
}
location ~\.(gif|jpg|png)$ { # 正则表达式匹配指定图片文件,~开头 $结束
root /data/images;
}
}
5. nginx代理 flask
将上面监听 5000 端口的server注释掉,将 flask 启动在 5000 端口即可,这样除了指定的图片文件,请求将被转发到 flask。