2021-10-21 centos7+ nginx + uwsgi(包含一个配置上的天坑)

首先粘贴一下NGINX的资料站
官网
http://nginx.org/

中文资料
http://www.nginx.cn/doc/index.htm

这次安装采用如下简单方法,注意这个是CENTOS7的方式,其他系统还是要按照官方网站指引走。

  1. sudo yum install yum-utils
  2. 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
  1. sudo yum-config-manager --enable nginx-mainline
  2. sudo yum install nginx
    至此算是安装完成了,下面记得关闭防火墙
  3. systemctl stop firewalld
  4. 尝试用系统模式启动下 systemctl start nginx
插播补充知识点:这里罗列一些通过系统管理的命令,备查
	systemctl  status  nginx	查看nginx状态
	systemctl  start    nginx	启动nginx服务
	systemctl  stop     nginx            关闭nginx服务
	systemctl  enable nginx	设置开机自启
	systemctl  disable nginx	禁止开机自启
  1. 查看一下信息ps -aux | grep nginx
    在这里插入图片描述
  2. 没问题的话关闭它,然后进行配置systemctl stop nginx
  3. nginx 的默认配置目录文件为:/etc/nginx/nginx.conf
  4. 执行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.  位置粘贴一个自定义修改配置
}

  1. 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;
  1. 展开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;

  1. 自定义配置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	按后端响应时间来分(第三方的)
  1. uwsgi的安装
pip install uwsgi
  1. 在目标虚拟环境下同时目标项目目录下建立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配置文件第一行

  1. 注释掉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; #连接上面配置的负载均衡
    }   
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值