服务器

服务器

服务器是一种提供高效计算的机器,与普通的PC主机相比,具有可观的稳定性,高并发性,可扩展性。

互联网任何一个应用都是以服务器为基础设施的,没有服务器我们就无法访问网络上的任何内容,只能使用单机的应用。例如网站,我们访问的任何一个网站都是保存在某个服务器上的,域名被DNS(域名解析服务器)解析到IP地址后,浏览器就能通过IP地址访问对应的服务器资源了。

就好比:服务器是人的家,人名相当于域名(不可重名),身份证号相当于IP地址。通过人名搜索到身份证号,通过身份证号获取到家的地址。

Web服务器

Web服务器不再是一种硬件设施,而是一种部署在服务器上的软件应用,它服务于各种网络请求,将网络请求进行处理,分发。

所以Web服务器的处理能力很大程度决定了该网站的并发能力。著名的Web服务器有:Apache Nginx

Web应用服务器

Web应用服务器是专门处理逻辑代码的服务器,同时还具有了处理网络请求的能力,一般为了提高并发能力,会在Web应用服务器上套一层Web服务器。

例如:Tomcat uwsgi gunicorn,后两个是Python的Web应用服务器,专门处理Python的逻辑代码。

联系

其中Web服务器和Web应用服务器都部署在服务器上。

Nginx服务器

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。其主要特点如下:

  • 轻量级 并发能力强
  • 支持处理静态资源,以减少应用服务器的压力
  • 负载均衡

负载均衡

大型的网站应用网站应用往往是由无数个服务器服务的,就像淘宝这种,单靠一个是不可能承受的了如此大的并发量,因此有了负载均衡。负载均衡又分为硬负载均衡软负载均衡,硬负载均衡是通过硬件的方式实现负载均衡,比如F5,成本都比较昂贵,软负载均衡则是通过软件的方式实现,比如Nginx和Apache。

所谓负载均衡就是将多个请求分发到不同的服务器上去,每个服务器都有处理请求和逻辑的应用服务器,以此来提高并发量。

下面使用Nginx来实现负载均衡配置

配置Nginx需要到/etc/nginx/nginx.conf文件内进行编辑

http {
##http的配置 server {
listen 80;//监听端口
server_name 域名;
location / {
proxy_pass http://lca;
}
}
upstream lca {//采用轮询方式,依次将请求转发到各个服务器
server 192.168.1.1:5000;
server 192.168.1.2:5000;
server 192.168.1.3:5000;
}
}

上面是采用轮询的方式实现端口转发 负载均衡,还有几种方式实现:

  • 权重方式:指定每个服务的权重比例,weight和访问比率成正比,通常用于后端服务机器性能不统一,将性能好的分配权重高来发挥服务器最大性能.
 upstream lca {
server 192.168.1.1:5000 weight=1;
server 192.168.1.2:5000 weight=2;
server 192.168.1.3:5000 weight=3;
}
  • iphash

    每个请求都根据访问ip的hash结果分配,经过这样的处理,每个用户固定访问一个后端服务。
 upstream lca {//权重与iphash结合
ip_hash
server 192.168.1.1:5000 weight=1;
server 192.168.1.2:5000 weight=2;
server 192.168.1.3:5000 weight=3;
}

解决跨域问题

跨域请求问题

为了提高浏览器的安全性,引入了跨域限制,也就是同源策略。

所谓源:如果两个页面(接口)的协议,端口或者域名都相同,那么两个页面就有相同的源。如果在同一个页面访问不同源的资源,则会出现500错误。

  • 浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域
  • 跨域限制主要是为了安全考虑

前端在请求后端资源时,往往会出现错误代码500的情况。



nginx解决跨域问题

解决跨域问题的方式有很多,在这里介绍通过nginx来解决跨域问题。

上面说到客户端浏览器同时请求服务器的不同资源若不是同源就会引发同源策略问题,那要是服务器请求服务器呢?那么照这个思路就想到了nginx的反向代理。

我们可以使用nginx的反向代理,将不同源的服务器集中到一个nginx web服务器下,也就是通过nginx来反向代理各个服务器。

server
{
listen 80;
server_name cola666.top;
// =/ 表示精确匹配路径为/的url,真实访问为http://localhost:8000
location = / {
proxy_pass http://localhost:8000;
}
//当匹配到/a的url自动去localhost:8000
location /a{
proxy_pass http://localhost:8001;
}
location /baidu/ {
proxy_pass http://www.baidu.com/;
}
}
  • 当有请求www.cola666.top的资源时,服务器接收到,会自动将请求内容交给localhost:8000web服务器处理。
  • 当有请求www.cola666.top/a下的资源时,服务器接收到,会自动将请求内容交给localhost:8001web服务器处理。
  • 当有请求www.cola666.top/baidu/下的资源时,服务器接收到,会请求百度的服务器资源。

虽然请求同源url,但实际上nginx帮助我们转发到其他web服务器,所以实际上访问的是非同源url资源,以实现跨域问题

location匹配规则
  • 当一个url匹配到多个location时,nginx将请求转发给匹配最长的location来处理
  • 代理
 location /b/ {
proxy_pass http://www.baidu.com/;
} location /b/ {
proxy_pass http://www.baidu.com;
}

二者的区别为后者会将location中的/b/也添加进url中,比如,后者则代理到http://www.baidu.com/b/xxx,前者则是http:///www.baidu.com/xxx

下面为一个比较简易的完整的nginx配置

worker_processes  1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
location / {
proxy_pass http://localhost:8080;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}

最后附加一个全面的nginx配置,包括静态资源缓存,负载均衡,Https,等等

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) '
'($http_user_agent)($http_x_forwarded_for)'
'($upstream_addr) ($upstream_response_time) ($request_time) ]'; proxy_cache_path /data/nginx/tmp-test levels=1:2 keys_zone=tmp-test:100m inactive=7d max_size=10g; access_log /var/log/nginx/access.log main; gzip on;
gzip_min_length 1k;
gzip_buffers 16 64k;
gzip_http_version 1.1;
gzip_comp_level 4;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css;
gzip_vary on;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream; include /etc/nginx/conf.d/*.conf; #allow to access by the same origin
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Credentials' 'true'; upstream zzm {
server localhost:8000;
#server locahost:8001;
} server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html; # Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf; location /static{
alias /var/static;
} location /{
proxy_cache tmp-test;
proxy_cache_key $uri;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept";
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
#include uwsgi_params;
proxy_pass http://zzm; # if django be used socket model to start up,using uwsgi of the following
#uwsgi_pass 127.0.0.1:8000;
#uwsgi_read_timeout 180; proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header REMOTE_ADDR $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; real_ip_recursive on;
} error_page 404 /404.html;
location = /40x.html {
} error_page 500 502 503 504 /50x.html; location = /50x.html { }
} #配置https
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name cola666.top;
root /usr/share/nginx/html; ssl_certificate /var/xxx.pem;#ssl两个证书路径
ssl_certificate_key /var/xxx.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on; # Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf; #静态资源路径
location /static{
alias /var/static;
} location / {
#缓存路径
proxy_cache tmp-test;
proxy_cache_key $uri; add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept";
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
#include uwsgi_params;
#uwsgi_pass 127.0.0.1:8000;
proxy_pass http://zzm;
proxy_redirect off;
#将客户端ip地址交给服务器后端
proxy_set_header Host $host;
proxy_set_header REMOTE_ADDR $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
real_ip_recursive on;
} error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
```![](https://img2020.cnblogs.com/blog/1624549/202006/1624549-20200628205157078-48009301.png)

nginx web服务器概念了解 配置的更多相关文章

  1. 20步打造最安全的NGINX WEB服务器

    Nginx 是一个轻量级的,高性能的Web服务器以及反向代理和邮箱(IMAP/POP3)代理服务器.它运行在UNIX,GNU /linux,BSD 各种版本,Mac OS X,Solaris和Wind ...

  2. 构建高效安全的Nginx Web服务器

    一 为什么选择Nginx搭建Web服务器 Apache和Nginx是目前使用最火的两种Web服务器,Apache出现比Nginx早.Apache HTTP Server(简称Apache)是世界使用排 ...

  3. 烂泥:Windows下安装与配置Nginx web服务器

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 前几篇文章,我们使用nginx都是在linux环境下,今天由于工作的需要.需要在windows环境也使用nginx搭建web服务器. 下面记录下有关ng ...

  4. nginx web服务器详解1(转)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://freeloda.blog.51cto.com/2033581/1285332 大 ...

  5. nginx web服务器应用

    Nginx介绍 Nginx是一个开源的,支持高性能,高并发的www服务和代理服务软件,因具有高并发(特别是静态资源),占用系统资源少等特性,且功能丰富而逐渐流行起来.功能应用上,Nginx不但是一个优 ...

  6. Nginx web 服务器 安装篇

    Nginx介绍: 静态web服务器有Nginx .Apache .lighttpd等 目前国内用的最常见的就是Nginx 和Apache 是一个开源的.支持高性能.高并发的www服务和代理服务软件,N ...

  7. nginx web服务器的安装使用

    nginx是一个web服务器(高性能web服务器),类似于apache服务器和iis服务器,由于nginx服务器具有轻量级高并发的特点,目前nginx的使用已经超越了apache. nginx介绍:n ...

  8. WEB服务器(IIS)的配置与管理

    安装Web服务器(IIS) 在"服务器管理器"-"角色"-"添加角色"-选择"Web服务器(IIS)"进行安装 这里,我 ...

  9. 08 部署nginx web服务器(转发fastDFS请求)

    先准备两个文件: fastdfs-nginx-module-master.tar.gz:fastDFS nginx安装包 nginx-1.17.3.tar.gz:nginx安装包 注:这两个包文件要匹 ...

随机推荐

  1. Java实现 LeetCode 62 不同路径

    62. 不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中 ...

  2. java实现求逆序对

    1 问题描述 给定一个随机数数组,求取这个数组中的逆序对总个数.要求时间效率尽可能高. 那么,何为逆序对? 引用自百度百科: 设 A 为一个有 n 个数字的有序集 (n>1),其中所有数字各不相 ...

  3. Spring Data Jpa Specification 调用Oracle 函数/方法

    开发框架用的Jpa,数据库是 Oracle. 在开发中难免会遇到需要数据库字段是字符串格式,但是又需要对其进行范围查询(数据库设计问题,后续应避免).那么问题来了, Jpa Specification ...

  4. 【Mysql】使用一条sql查询出库表结构信息

    1.新建查询 将以下脚本粘贴进去 脚本如下: SELECT TABLE_SCHEMA 库名, TABLE_NAME 表名, COLUMN_NAME 列名, COLUMN_TYPE 数据类型, DATA ...

  5. EasyARM-iMX257 linux两年前的笔记

    我依然清晰的记得刚拿到Imx283 257的情景,兴奋中充满忧虑,对操作系统的概念只知一二,不知三四!!周立功出品的资料我一直觉得是比较精品的,同样这款iMX283配套的文档资料(v1.04)也是比较 ...

  6. 轻松解决Github连接缓慢、图裂问题

    1 简介 gayhub(误)github作为全世界最大的开源代码库以及版本控制系统,是用来托管项目以及学习开源技术非常好的平台,是我心中最好的学习网站,我们公众号的众多技术文章对应的数据和代码也都一直 ...

  7. 有关指针 -> 和* 的重载

    1, #include<iostream> #include<string> using namespace std; class test{ int i; public: t ...

  8. linux下解决vim打开文件乱码现象

    用VIM打开一个文件进行编辑时最下面的任务栏出现中文乱码,严重影响编写代码. 因为VIM默认的语言支持不行, 修改~/.vimrc 文件或/etc/vimrc 文件,添加一下代码: set encod ...

  9. [noi.ac省选模拟赛20200606]赌怪

    题目   点这里看题目. 分析   先特判掉\(K=2\)的情况.   首先可以考虑到一个简单 DP :   \(f(i)\):前\(i\)张牌的最大贡献.   转移可以\(O(n^2)\)地枚举区间 ...

  10. CentOS7.5搭建spark2.3.1集群

    一 下载安装包 1 官方下载 官方下载地址:http://spark.apache.org/downloads.html 2  安装前提 Java8         安装成功 zookeeper  安 ...