首先粘贴一下NGINX的资料站
官网
http://nginx.org/
中文资料
http://www.nginx.cn/doc/index.htm
这次安装采用如下简单方法,注意这个是CENTOS7的方式,其他系统还是要按照官方网站指引走。
sudo yum install yum-utils
vim /etc/yum.repos.d/nginx.repo
建立这个新文件并在里边添加以下内容并保存
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
sudo yum-config-manager --enable nginx-mainline
sudo yum install nginx
至此算是安装完成了,下面记得关闭防火墙systemctl stop firewalld
- 尝试用系统模式启动下
systemctl start nginx
插播补充知识点:这里罗列一些通过系统管理的命令,备查
systemctl status nginx 查看nginx状态
systemctl start nginx 启动nginx服务
systemctl stop nginx 关闭nginx服务
systemctl enable nginx 设置开机自启
systemctl disable nginx 禁止开机自启
- 查看一下信息
ps -aux | grep nginx
- 没问题的话关闭它,然后进行配置
systemctl stop nginx
- nginx 的默认配置目录文件为:/etc/nginx/nginx.conf
- 执行
vim /etc/nginx/nginx.conf
去配置一下
user nginx; #用户名,这个在配置自己的配置时应该改成自己的登录账号名,比如root
# user root;
worker_processes auto; # 工作进程,设置多一些可以提高并发能力
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http { #HTTP请求
include /etc/nginx/mime.types; #这里是能支持的类型列表 下面的10是这个文件的展开
default_type application/octet-stream;#默认类型
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" ' #这里是日志的格式
access_log /var/log/nginx/access.log main; #日志输出的位置
sendfile on;
#tcp_nopush on;
keepalive_timeout 65; #连接时间,超时设定
#gzip on;
include /etc/nginx/conf.d/*.conf; #这个配置在下面11.展开,如果配置自己的则这个include 删除 ,我在下面12. 位置粘贴一个自定义修改配置
}
vim /etc/nginx/mime.types
打开支持的列表看看,这些都是支持的类型
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss;
text/mathml mml;
text/plain txt;
text/vnd.sun.j2me.app-descriptor jad;
text/vnd.wap.wml wml;
text/x-component htc;
image/png png;
image/svg+xml svg svgz;
image/tiff tif tiff;
image/vnd.wap.wbmp wbmp;
image/webp webp;
image/x-icon ico;
image/x-jng jng;
image/x-ms-bmp bmp;
font/woff woff;
font/woff2 woff2;
application/java-archive jar war ear;
application/json json;
application/mac-binhex40 hqx;
application/msword doc;
application/pdf pdf;
application/postscript ps eps ai;
application/rtf rtf;
application/vnd.apple.mpegurl m3u8;
application/vnd.google-earth.kml+xml kml;
application/vnd.google-earth.kmz kmz;
application/vnd.ms-excel xls;
application/vnd.ms-fontobject eot;
application/vnd.ms-powerpoint ppt;
application/vnd.oasis.opendocument.graphics odg;
application/vnd.oasis.opendocument.presentation odp;
application/vnd.oasis.opendocument.spreadsheet ods;
application/vnd.oasis.opendocument.text odt;
application/vnd.openxmlformats-officedocument.presentationml.presentation
pptx;
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
xlsx;
application/vnd.openxmlformats-officedocument.wordprocessingml.document
docx;
application/vnd.wap.wmlc wmlc;
application/wasm wasm;
application/x-7z-compressed 7z;
application/x-cocoa cco;
application/x-java-archive-diff jardiff;
application/x-java-jnlp-file jnlp;
application/x-makeself run;
application/x-perl pl pm;
application/x-pilot prc pdb;
application/x-rar-compressed rar;
application/x-redhat-package-manager rpm;
application/x-sea sea;
application/x-shockwave-flash swf;
application/x-stuffit sit;
application/x-tcl tcl tk;
application/x-x509-ca-cert der pem crt;
application/x-xpinstall xpi;
application/xhtml+xml xhtml;
application/xspf+xml xspf;
application/zip zip;
application/octet-stream bin exe dll;
application/octet-stream deb;
application/octet-stream dmg;
application/octet-stream iso img;
application/octet-stream msi msp msm;
audio/midi mid midi kar;
audio/mpeg mp3;
audio/ogg ogg;
audio/x-m4a m4a;
audio/x-realaudio ra;
video/3gpp 3gpp 3gp;
types {
text/html html htm shtml;
text/css css;
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss;
text/mathml mml;
- 展开
vim /etc/nginx/conf.d/*.conf
里边的内容如下
server {
listen 80; #监听端口
server_name localhost; #服务器ip地址,如果是阿里云就填上公网IP
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html; # 默认主页的路径位置
index index.html index.htm;#默认主页的具体文件名
}
#error_page 404 /404.html;
- 自定义配置
vim /laobao/nginx1.conf
,用这个配置, 静态页面
user root; #用户名,这个在配置自己的配置时应该改成自己的登录账号名,比如root
worker_processes 1; # 工作进程,设置多一些可以提高并发能力
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http { #HTTP请求
include /etc/nginx/mime.types; #这里是能支持的类型列表
default_type application/octet-stream;#默认类型
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" ' #这里是日志的格式
access_log /var/log/nginx/access.log main; #日志输出的位置
sendfile on;
#tcp_nopush on;
keepalive_timeout 65; #连接时间,超时设定
#gzip on;
#include /etc/nginx/conf.d/*.conf; #这个配置如果配置自己的则这个include 删除 ,其实这个include 是个包引用
server {
listen 80; #监听端口
server_name localhost; #服务器ip地址,如果是阿里云就填上公网IP
#access_log /var/log/nginx/host.access.log main;
location / { #======一般主要是配置这里====================
root /root/laobao/templates; # 项目路径
index index.html index.htm;#入口页名称
}
error_page 500 502 503 504 /50x.html; #出错后的具体配置
location = /50x.html {
root /usr/share/nginx/html;
}
}
}
配置好了以后启动NGINX使用nginx -c 绝对文件路径
来启动服务比如我这次的启动命令为
nginx -c /root/laobao/nginx1.conf
这个命令启动后,如果想关闭服务用nginx -s quit
额外插入一些知识点:
nginx -t 不运行,仅测试配置文件
nginx -c configpath 从指定路径加载配置文件
nginx -t -c configpath 测试指定配置文件
配置文件的块名意思:
main 全局设置
events{ 工作模式,连接配置
...
}
http{ http的配置
...
upstream xxx{ 负载均衡配置
...
}
server{ 主机设置
...
location xxx{ URL匹配
...
}
}
}
mian
user nginx; worker进程运行的用户和组
worker_processes 1; 指定Nginx开启的子进程数,多核CPU建议设置和CPU数量一样的进程数
error_log xxx level; 用来定义全局错误日志文件,通常放在var中,level有 debug,info,notice, warn,error,crit
pid xxx; 指定进程id的存储文件位置
events
指定工作模式和以及连接上限
events{
use epoll;
worker_connections 1024;
}
use 指定nginx工作模式
epoll 高效工作模式,linux
kqueue 高效工作模式, bsd
poll 标准模式
select 标准模式
worker_connections 定义nginx每个进程的最大连接数
正向代理 连接数 * 进程数
反向代理 连接数 * 进程数 / 4
linux系统限制最多能同时打开65535个文件,默认上限就是65535,可解除 ulimit -n 65535
http
最核心的模块,主要负责http服务器相关配置,包含server,upstream子模块
include mime.types;设置文件的mime类型
include xxxconfig; 包含其它配置文件,分开规划解耦
default_type xxx; 设置默认类型为二进制流,文件类型未知时就会使用默认
log_format 设置日志格式
sendfile 设置高效文件传输模式
keepalive_timeout 设置客户端连接活跃超时
gzip gzip压缩
server
用来指定虚拟主机
listen 80; 指定虚拟主机监听的端口
server_name localhost; 指定ip地址或域名,多个域名使用空格隔开
charset utf-8; 指定网页的默认编码格式
error_page 500 502 /50x.html 指定错误页面
access_log xxx main; 指定虚拟主机的访问日志存放路径
error_log xxx main; 指定虚拟主机的错误日志存放路径
root xxx; 指定这个虚拟主机的根目录
index xxx; 指定默认首页
location
核心中的核心,以后的主要配置都在这
主要功能:定位url,解析url,支持正则匹配,还能支持条件,实现动静分离
语法
location [modifier] uri{
...
}
modifier 修饰符
= 使用精确匹配并且终止搜索
~ 区分大小写的正则表达式
~* 不区分大小写的正则表达式
^~ 最佳匹配,不是正则匹配,通常用来匹配目录
常用指令
alias 别名,定义location的其他名字,在文件系统中能够找到,如果location指定了正则表达式,alias将会引用正则表达式中的捕获,alias替代lication中匹配的部分,没有匹配的部分将会在文件系统中搜索
反向代理
proxy_pass URL; 反向代理转发地址,默认不转发header,需要转发header则设置
proxy_set_header HOST $host;
proxy_method POST; 转发的方法名
proxy_hide_header Cache-Control; 指定头部不被转发
proxy_pass_header Cache-Control; 设置哪些头部转发
proxy_pass_request_header on; 设置转发http请求头
proxy_pass_request_body on; 设置转发请求体
upstream
负载均衡模块,通过一个简单的调度算法来实现客户ip到后端服务器的负载平衡
写法 upstream myproject{
ip_hash;
server 127.0.0.1:8000;
server 127.0.0.1:8001 down;
server 127.0.0.1:8002 weight=3;
server 127.0.0.1:8003 backup;
fair;
}
负载均衡算法
weight 负载权重
down 当前server不参与负载均衡
backup 其它机器全down掉或满载使用此服务
ip_hash 按每个请求的hash结果分配
fair 按后端响应时间来分(第三方的)
- uwsgi的安装
pip install uwsgi
- 在目标虚拟环境下同时目标项目目录下建立uwsgi.ini 配置文件
vim uwsgi.ini
[uwsgi]
#使用nginx连接时 使用
#socket = 0.0.0.0:8080
#直接作为WEB服务器使用
http=0.0.0.0:5001
#配置工程目录
chdir =/root/laobao
#配置项目wsgi目录,相对于工程目录
#WSGI-file=OnlineStore/wsgi.py #这个部分是DJANGO用的
#下面适用于flask项目部署,这个记得是配置文件相对入口文件的相对路径,因为两个文件平级所以直接写app.py
wsgi-file=app.py
#router#绑定的核心,一般都是app ,天坑在这里,注释千万别写下面这行后面,他会把注释也给你解释进去执行。。。。。
callable=app
#配置进程,线程信息
#进程数
processes=4
#线程数
threads=10
#准许线程
enable-threads=True
#主进程
master=True
#进程号
pidfile=uwsgi.pid
# 守护和日志
daemonize=uwsgi.log
这个坑在上面配置的callable=app
这行,如果在这行后面写注释,绝对会出错,显示 Internal Server Error 。。。
配置完毕后在项目根,运行服务:uwsgi --ini uwsgi.ini
查询进程:ps -aux | grep uwsgi
关闭服务:uwsgi --stop uwsgi.pid
另外,在该目录下还会生成两个文件,就是配置里最后两行的进程号和日志,日志能够显示具体问题,出错了多看看好了
至此,uwsgi部署完毕进入下一个修改连接环节
为了能够与NGINX配合,首先修改uwsgi配置文件第一行
- 注释掉http那行,启用socket这行,
#使用nginx连接时 使用
socket = 0.0.0.0:5001
#直接作为WEB服务器使用
#http=0.0.0.0:5001
作为服务器ip应该是0.0.0.0 端口可以任意指定但要注意两点 1.如果和NGINX配合那么要和NGINX配置的端口保持一致 2 .如果作为web服务使用记得在云服务器安全组打开对应端口
16. 在目标项目下建立nginx2.ini 配置文件,这里其实前边基本都通用就在server部分有改动
user root; #用户名,这个在配置自己的配置时应该改成自己的登录账号名,比如root
worker_processes 1; # 工作进程,设置多一些可以提高并发能力
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http { #HTTP请求
include /etc/nginx/mime.types; #这里是能支持的类型列表 下面的10是这个文件的展开
default_type application/octet-stream;#默认类型
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" ' #这里是日志的格式
access_log /var/log/nginx/access.log main; #日志输出的位置
sendfile on;
#tcp_nopush on;
keepalive_timeout 65; #连接时间,超时设定
#gzip on;
#include /etc/nginx/conf.d/*.conf; #这个配置在下面11.展开,如果配置自己的则这个include 删除 ,其实这个include 其实是个包引用
server {
listen 80; #监听端口
server_name 47.105.72.112; #服务器名称
#access_log /var/log/nginx/host.access.log main;
root root/laobao;
location /static {
alias /root/laobao/static;
}
location / {
include /etc/nginx/uwsgi_params; # 项目路径
uwsgi_pass localhost:5001;#入口页名称
}
}
}
server{}的改动为:
server {
listen 80; #监听端口
server_name 47.xxx.xx.xxx; #服务器名称
#access_log /var/log/nginx/host.access.log main;
root root/laobao; #这个root指定了项目根目录
location /static { #这个是静态目录,用来打通IP路由和本地文件联通的配置,其实就是把 ip/static/xx.jpg对应到 /root/laobao/static/xx.jpg上,这样就可以在浏览器搜索上直接请求静态文件了
alias /root/laobao/static; #这个是静态目录的别名
}
location / { #这里是绑定uwsgi的具体配置
include /etc/nginx/uwsgi_params; # 指定使用uwsgi_params,这个Python用的,这个文件夹里还有别的语言的配置文件,咱就用这一个就行了
uwsgi_pass localhost:5001;# 配置入口,端口这里一定要和uwsgi的配置端口一致
}
}
然后把nginx 和 uwsgi服务都在项目环境以及项目根目录下用对应的配置启动,如果没出错,就可以访问了,本次配置绑定的80端口,这种端口不用填端口号,当然,随便改,改外网就该监听端口,改内部就改localhost后面的端口就行。
补充一个USWGI负载均衡,首先要明白USWGI是框架容器,所以要多配制几个不同的端口并启动比如我启动5001,5002两个端口USWGI服务总共10个线程左右,然后配置NGINX的负载均衡部分如下。
# 如果使用的是 uwsgi
upstream mycom{
ip_hash;
server 127.0.0.1:5001; #负载均衡服务器群
server 127.0.0.1:5002;
}
server {
listen 8080;
# 表示最大允许的body体大小
client_max_body_size 100m;
location / {
include uwsgi_params;
uwsgi_pass mycom; #连接上面配置的负载均衡
}
}