nginx入门及跨域解决方案

贾芬
• 阅读 3253

1.简介

百度百科:
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

2.正向代理和反向代理

正向代理:在客户端与服务器端之间的服务器,从服务器获取到请求结果然后返回给客户端,客户端获取到的服务端最终地址是最终的服务地址,vpn和各种梯子可以看做正向代理的代表。

反向代理:同正向代理类似,客户端请求首先也是请求到代理服务器,代理服务器然后请求真正的服务,获取响应,然后返回给客户端,但区别是客户端感知的服务端是在代理服务器,获取的最终服务ip地址也是代理服务器的地址。

区别:正向代理是在客户端侧,反向代理是在服务端侧.所以nginx主要做反向代理服务器。

3.nginx基本命令

安装Nginx

yum install nginx

没有可用的软件包,原因是nginx不在第三方yum源中
sudo yum install epel-release

yum update

nginx -s reload 重启
nginx -t 检查配置文件是否有错误
nginx -s quit 保护性的关闭nginx
nginx -s stop 快速关闭nginx
systemctl start nginx
nginx -v 显示nginx的版本号

4.nginx 配置文件说明

1.全局块配置

user nginx;  //配置哪些用户或用户组能够操作nginx
worker_processes 1;  //允许生成的进程数,可以根据cpu数目来进行配置
error_log /var/log/nginx/error.log; //错误日志文件
error_log /var/log/nginx/error.log notice (notice 日志级别)
error_log /var/log/nginx/error.log info (info日志级别)
pid /run/nginx.pid; //nginx进程运行文件存放地址

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

2.events块配置

events {
    accept_mutex on;         //设置网路连接序列化,防止惊群现象发生,默认为on
    multi_accept off;       //设置一个进程是否同时接受多个网络连接
    worker_connections 1024; //最大连接数,默认为1024
}

3.http块配置

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; //main为日志格式的名称  /var/log/nginx/access.log为日志文件

    sendfile            on; //防止网络阻塞,当网络阻塞时候,nginx能够帮助客户端重新发送请求
    tcp_nopush          on; 
    tcp_nodelay         on;
    keepalive_timeout   65; //长连接最长时间
    types_hash_max_size 2048;  //
    gzip                on; //开启自动压缩

    include             /etc/nginx/mime.types; //nginx支持的哪些文件扩展名和文件类型的映射表
    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;
    
    
    server{} //可以配置多个server 监听多个端口
    server{} //如监听https 443端口
}

server块配置静态资源访问
location / {  // "/"代表通配符,所有的请求url都会到达此处
    root /usr/local/nginx/html;   //指定静态资源目录
    index index.html index.html;  //如果没有设置主页面,会在这儿的设置中按照顺序找
}

listen 80; //server监听的端口
server_name localhost; //服务名称

proxy_pass http://127.0.0.1:8080;  //反向代理

url配置:
    ~ 表示正则匹配,后面的内容可以是正则表达式匹配
    . 表示任意一个或多个字符
    \. 转义.字符
    | 表示或
    $ 表示结尾
    如
    location ~ \.(html|js|css|imags|png|gif|jpg|jpeg|png|mp4|zip|ppt)${
        root /usr/local/nginx/html;
        index index.html index.htm;
    }    
    可以表示静态资源
    
    location ~\.jsp$ {
            proxy_set_header Host $host; //设置转发头信息
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://127.0.0.1:8889;  //url以jsp结尾的都转发到8889端口
    }
    
    重写url
    location /api {
        rewrite ^/api/(.\*)$ /$1 break;
        proxy_pass http://localhost:8082
    }
    
    //  http://localhost:8089/api/user/getUserById/  -> http://8089/user/getUserById/ 并且转发到 http://localhost:8082上

nginx入门及跨域解决方案

5.集群配置
在http块中配置

upstream xiayuCluster{
    server 127.0.0.1:8089; //三个服务(不要使用localhost否则效率很低)
    server 127.0.0.1:8090;
    server 127.0.0.1:8091;
}

然后在server location proxy_pass中配置

location / {
    proxy_pass http://xiayuCluster;
}

6.负载均衡配置
Nginx默认的路由选择算法是轮询算法,也可以配置权重,在upstream中配置server时写入weight即可

upstream{
    server 127.0.0.1:8089 weight=1;
    server 127.0.0.1:8090 weight=3;
    server 127.0.0.1:8091 weight=6;
}

负载均衡选择算法-iphash,按照请求的hash值进行分配。
在upstream{} 配置中加入,ip_hash;即可

upstream{
    ip_hash;
    server 127.0.0.1:8089;
    server 127.0.0.1:8090;
    server 127.0.0.1:8091;
}

还有第三方依据url进行分配(url_hash)和响应时间进行分配(fair).

7.集群/分布式环境下session处理

session 保持(用户每次请求都请求到同一台机器上,使用ip_hash解决)
session 复制(session在所有服务都存在,缺点是需要广播到所有服务中,网络要求高)
session 共享(使用一台机器作为session管理服务)
存储在redis中间件实现session共享,利用redis集群,也可以使用token。

8.使用Nginx解决跨域问题

当一个域名的网站访问另外一个域名下的资源,浏览器默认是不允许的,为什么浏览器这样做了?这样做可以避免cors跨域攻击。可以在Nginx上设置反向代理进行转发避免跨域访问,还可以设置跨域访问的域名限制。注意下面的配置都是配置在去跨域访问域名的服务器内,如域名A去跨域访问域名B的资源,则需要配置域名B服务器的配置,如果别的域名也跨域访问域名A,那么域名A服务器也可以使用下面的配置进行解决跨域问题。当同一个域名不同端口访问也属于跨域访问。在html页面中使用<img src=""/>不属于跨域访问。

nginx入门及跨域解决方案

a.设置反向代理
当一个域名下需要访问另外一个域名下的资源时候,前端访问资源的域名只有一个,在nginx代理服务器上做转发。

location /resource {
  proxy_pass http://otherdomain.com/; //或者相同的域名,不同的端口
}

避免跨域访问

b.添加头信息

在nginx.conf配置文件http块中添加跨域访问配置

add_header Access-Control-Allow-Origin *; //允许所有域名跨域访问代理地址
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET; //跨域请求访问请求方式

跨域问题还可在具体应用响应头信息中添加头信息运行跨域访问
header('Access-Control-Allow-Origin:*');//允许所有来源访问

header('Access-Control-Allow-Method:GET');//允许访问的方式
使用jsonp实现跨域访问,该方式需要写回调函数。

点赞
收藏
评论区
推荐文章
Stella981 Stella981
3年前
Nginx入门简介和反向代理、负载均衡、动静分离理解
场景Nginx简介Nginx("enginex")是一个高性能的HTTP和反向代理服务器特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。Nginx可以作为静态页面的web服务器,
Stella981 Stella981
3年前
Nginx(Windows)
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。反向代理方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。比如我
Stella981 Stella981
3年前
LNMP架构介绍 MySQL安装 PHP安装 Nginx介绍
LNMP架构介绍LNMP的简介:LNMP代表的就是:Linux系统下NginxMySQLPHP这种网站服务器架构。Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Mysql是一个小型关系型数据库管理系统。PHP是一种在服务器端执行的嵌
Stella981 Stella981
3年前
Nginx Linux详细安装部署教程
转发:https://www.cnblogs.com/taiyonghai/p/6728707.html一、Nginx简介Nginx是一个web服务器也可以用来做负载均衡及反向代理使用,目前使用最多的就是负载均衡,具体简介我就不介绍了百度
Stella981 Stella981
3年前
Nginx是什么及作用?
一:介绍nginx是一个高性能的HTTP和反向代理服务器,其特点是占用内存少,并发能力强。二:名词介绍代理服务器:代理服务器英文全称是ProxyServer,其功能就是代理网络用户去取得网络信息。形象的说:它是网络信息的中转站,去获取信息。主要的功能有:1.突破自身IP访问限制,访问国外站点。教育网、169网等
Stella981 Stella981
3年前
Nginx详细安装部署教程
一、Nginx简介Nginx是一个web服务器也可以用来做负载均衡及反向代理使用,目前使用最多的就是负载均衡,具体简介我就不介绍了百度一下有很多,下面直接进入安装步骤二、Nginx安装1、下载Nginx及相关组件Linux系统是Centos6.564位,我直接切换到root用户下安装!(https://im
可莉 可莉
3年前
12.6 Nginx安装 12.7 默认虚拟主机 12.8 Nginx用户认证 12.9 Nginx域名重定向
12.5Nginx介绍Nginx("enginex")是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSDlike协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、新浪、网
Wesley13 Wesley13
3年前
nginx中文手册内容说明
1.什么是nginx?Nginx是一个高性能的Web和反向代理服务器,它具有有很多非常优越的特性:作为Web服务器:相比Apache,Nginx使用更少的资源,支持更多的并发连接,体现更高的效率,这点使Nginx尤其受到虚拟主机提供商的欢迎。能够支持高达50,000个并发连接数的响应,感谢Nginx为我们选择了e
Stella981 Stella981
3年前
Nginx安全加固配置手册
第1章   概述1.1   目标Nginx(发音同enginex)是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,由俄罗斯的程序设计师IgorSysoev所开发,可以稳定地运行在Linux、Windows等操作系统上,其特点是占用内存少,并发能力强。同其他软件一样,Ng
Stella981 Stella981
3年前
Nginx学习总结(一)
一、基本概念1.什么是Nginx?Nginx是一个高性能的web服务器和反向代理服务器,特点是占用内存少,并发能力强;事实上Nginx的并发能力确实在同类型的网页服务器中表现良好;Nginx专为性能优化而开发,性能是其主要的考量;实现上非常注重效率,经得住高并发的考验,有报告表名能支持高达50000个并发连接数
胖大海 胖大海
2年前
什么是nginx
Nginx的介绍Nginx是一款是由俄罗斯的程序设计师IgorSysoev所开发高性能的Web和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。在高连接并发的情况下,Nginx是Apache服务器不错