nginx 部署前后端(静态文件转发,接口转发,负载均衡)

niginx 服务器部署 前后端项目

一,安装nginx 

yum install nginx 

# 启动服务
systemctl start nginx 

二,主,分 文件配置

1.主配置文件

  • centos 默认安装位置 /etc/nginx/nginx.conf


user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;


include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

 # 导入自定义目录下的所有配置
    include /etc/nginx/conf.d/*.conf;


}

  • 自定义的配置文件路径 /etc/nginx/conf.d

        前端项目配置 :/etc/nginx/conf.d/vue.conf

server{
	listen 80;
	server_name localhost;
	location / {
		root /home/dist;
		index index.html;
	}
}

        前端项目项目ip配置 /src/utils/request.js


/**
 * 创建axios访问IP地址
 */
const ENV = process.env.NODE_ENV;
const host =  ENV === 'development' ? 'http://127.0.0.1:8000' : 'http://120.78.***.**:8000';


export default host;

        后端项目配置 : /etc/nginx/conf.d/django.conf

server {
    listen      8000;
    server_name 127.0.0.1;
    charset     utf-8;
 
    client_max_body_size 75M;
 	# 配置静态资源文件
	location /static {
        expires 30d;
        autoindex on;
        add_header Cache-Control private;
        alias /home/project/static/;
    }
 	# 配置uWSGI服务器
	location / {
			include uwsgi_params;
			uwsgi_pass 127.0.0.1:8080;
			uwsgi_read_timeout 2;
		}
}

        后端项目数据库配置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'MyDjango',
        'USER': 'root',
        'PASSWORD': 'xxxxxx!',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    },
}

三,mysq安装

虚拟机部署mysql_云服务器 ECS-阿里云帮助中心

四,负载均衡配置

upstream backend {
    server 192.168.0.141 ;
    server 192.168.0.142 ; 
}

server {
   listen	80;  #listen、server_name这些正常配置
   server_name	www.test.com;
    location / {
        proxy_pass http://backend;  ##反向代理执行定义的upstream名字
    }
}

五,代理多个后端项目,依项目名区分

        1,主/etc/nginx/nginx.conf

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;
}

       2,/etc/nginx/conf.d/

                项目1 apiprojet : 配置文件 apiproject.conf

server{
	listen 80;
	server_name localhost;
	
	location /apiproject/ {		
            proxy_pass   http://127.0.0.1:900/;
	}
}

        访问  http://ip/apiproject/ 等同于访问 http://ip:900/

        用云服务器安全组保护900端口

六,代理redis,mysql

        /etc/nginx/nginx.conf

user root;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    .....
}


stream {
	log_format  basic '$remote_addr - [$time_local] '
			'$protocol $status $bytes_sent $bytes_received '
			'$session_time';
	include /etc/nginx/conf.d/stream/*.conf;
}

        /etc/nginx/conf.d/stream/mysql.conf


upstream mysql-server {
       	server 192.168.1.119:3306 max_fails=3 fail_timeout=30s;
}

server {
	listen 0.0.0.0:3306;
	proxy_connect_timeout 300s;
	proxy_timeout 300s;
	proxy_pass mysql-server;


	access_log /root/logs/mysql-access.log basic;
	error_log /root/logs/mysql-error.log warn;
}



        /etc/nginx/conf.d/stream/redis.conf

upstream redis-server {
       	server 192.168.1.97:6379 max_fails=3 fail_timeout=30s;
}

server {
	listen 0.0.0.0:6379;
      	proxy_connect_timeout 30s;
       	proxy_timeout 30s;
	proxy_pass redis-server;
}


参考: Nginx之负载均衡upstream模块简介和使用_nginx upstream_普通网友的博客-CSDN博客

nginx配置详解

参考:nginx配置详解_nginx 配置详解_吃炸鸡的前端的博客-CSDN博客

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 当出现element文件上传nginx静态文件post请求405问题时,这通常是由于nginx配置不正确导致的。405错误表示服务器禁止使用POST方法请求该URL。解决此问题的方法如下: 1. 检查nginx配置文件中的location段,确保已经正确配置了POST请求。比如,确保在location段内使用了`allow_methods`指令来允许POST方法。示例如下: ``` location / { allow_methods GET POST; } ``` 2. 检查文件上传路径是否正确设置。上传文件时,nginx需要指定正确的文件上传路径,并且该路径需要有相应的写权限。确保路径正确,并且nginx用户(通常是www-data)拥有该路径的写权限。 3. 检查nginx是否加载了必要的模块。如果没有加载所需的模块,nginx可能无法处理POST请求。确保在nginx的配置文件中加载了`ngx_http_upload_module`模块,该模块负责处理文件上传请求。 4. 检查nginx是否正确处理了静态文件请求。如果nginx在处理静态文件时出错,可能会导致405错误。可以通过浏览器直接访问静态文件URL,以确保nginx可以正确返回静态文件。 5. 检查后服务器是否正确处理了POST请求。如果nginx配置正确,但是后服务器无法处理POST请求,也会导致405错误。可以使用其他工具或编程语言测试后服务器是否可以正确处理POST请求。 综上所述,通过检查nginx的配置文件和相关权限,确保路径和模块正确配置,检查后服务器的处理能力,应该能够解决element文件上传nginx静态文件post请求405问题。 ### 回答2: 当使用Nginx作为静态文件服务器时,出现element文件上传时POST请求返回405错误的问题,可能是由于Nginx配置不正确导致的。 首先要确保Nginx支持POST请求,可以在Nginx的配置文件中添加以下内容: ``` location / { try_files $uri $uri/ /index.html; if ($request_method = POST) { return 405; } } ``` 上述配置中,通过try_files指令将请求转发给index.html,同时对POST请求返回405错误。 另外,还需要确保Nginx支持文件上传,需要在Nginx配置文件中添加以下内容: ``` client_max_body_size 100m; ``` 上述配置可以通过设置可以上传的文件大小,这里设置为100m。 在以上配置添加完毕后,重新启动Nginx服务,然后再次尝试element文件上传的POST请求,应该可以成功上传文件了。 如果还出现405错误,可以检查以下几点: 1. 确保Nginx的配置文件正确加载并且重新启动了Nginx服务。 2. 检查element文件上传的POST请求是否正确,可以使用浏览器的开发者工具查看请求的URL和请求方式是否正确。 3. 检查服务器代码,确保能够正确接收并处理上传的文件。 总结:要解决element文件上传时Nginx静态文件POST请求返回405错误的问题,需要正确配置Nginx支持POST请求和文件上传,并确保相关代码的正确性。 ### 回答3: 当使用Nginx作为静态文件服务器时,使用element组件进行文件上传时可能面临405问题。405是HTTP状态码之一,表示请求的方法不被服务器支持。 造成这个问题的可能原因是,Nginx默认情况下只允许GET和HEAD方法。而文件上传通常使用POST方法来传输文件。因此,当element组件发送POST请求时,Nginx会拒绝该请求并返回405状态码。 要解决这个问题,可以通过在Nginx的配置文件中添加额外的配置来允许POST方法。 首先,在Nginx的配置文件中找到相关的location配置,该配置指定了要处理文件上传的URL路径。 然后,在该location的配置中添加如下配置项: ``` location /upload { if ($request_method = POST) { # 处理文件上传的逻辑 } # 其他配置项 } ``` 上述配置中,我们使用if语句来判断请求的方法是否为POST。如果是POST方法,我们可以在其中添加处理文件上传的逻辑。 注意,这只是一个示例配置,并不代表完整的配置文件,你需要根据自己的实际情况进行调整。 完成以上配置后,保存并重启Nginx服务。此时,element组件发送的POST请求将被Nginx正确处理,不再返回405状态码,解决了文件上传的问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值