服务器

服务器

服务器是一种提供高效计算的机器,与普通的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文件内进行编辑

  1. http {
  2. ##http的配置
  3. server {
  4. listen 80;//监听端口
  5. server_name 域名;
  6. location / {
  7. proxy_pass http://lca;
  8. }
  9. }
  10. upstream lca {//采用轮询方式,依次将请求转发到各个服务器
  11. server 192.168.1.1:5000;
  12. server 192.168.1.2:5000;
  13. server 192.168.1.3:5000;
  14. }
  15. }

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

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

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

解决跨域问题

跨域请求问题

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

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

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

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



nginx解决跨域问题

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

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

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

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

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

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

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

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

  1. worker_processes 1;
  2. events {
  3. worker_connections 1024;
  4. }
  5. http {
  6. include mime.types;
  7. default_type application/octet-stream;
  8. sendfile on;
  9. keepalive_timeout 65;
  10. server {
  11. listen 80;
  12. location / {
  13. proxy_pass http://localhost:8080;
  14. }
  15. error_page 500 502 503 504 /50x.html;
  16. location = /50x.html {
  17. root html;
  18. }
  19. }
  20. }

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

  1. user nginx;
  2. worker_processes auto;
  3. error_log /var/log/nginx/error.log;
  4. pid /run/nginx.pid;
  5. # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
  6. include /usr/share/nginx/modules/*.conf;
  7. events {
  8. worker_connections 1024;
  9. }
  10. http {
  11. #自定义的日志格式
  12. log_format main '[($remote_addr) - ($remote_user [$time_local]) $request" '
  13. '($status) '
  14. '($http_user_agent)($http_x_forwarded_for)'
  15. '($upstream_addr) ($upstream_response_time) ($request_time) ]';
  16. proxy_cache_path /data/nginx/tmp-test levels=1:2 keys_zone=tmp-test:100m inactive=7d max_size=10g;
  17. access_log /var/log/nginx/access.log main;
  18. gzip on;
  19. gzip_min_length 1k;
  20. gzip_buffers 16 64k;
  21. gzip_http_version 1.1;
  22. gzip_comp_level 4;
  23. gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css;
  24. gzip_vary on;
  25. sendfile on;
  26. tcp_nopush on;
  27. tcp_nodelay on;
  28. keepalive_timeout 65;
  29. types_hash_max_size 2048;
  30. include /etc/nginx/mime.types;
  31. default_type application/octet-stream;
  32. include /etc/nginx/conf.d/*.conf;
  33. #allow to access by the same origin
  34. add_header 'Access-Control-Allow-Origin' '*';
  35. add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
  36. add_header 'Access-Control-Allow-Credentials' 'true';
  37. upstream zzm {
  38. server localhost:8000;
  39. #server locahost:8001;
  40. }
  41. server {
  42. listen 80 default_server;
  43. listen [::]:80 default_server;
  44. server_name _;
  45. root /usr/share/nginx/html;
  46. # Load configuration files for the default server block.
  47. include /etc/nginx/default.d/*.conf;
  48. location /static{
  49. alias /var/static;
  50. }
  51. location /{
  52. proxy_cache tmp-test;
  53. proxy_cache_key $uri;
  54. add_header Access-Control-Allow-Origin *;
  55. add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept";
  56. add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
  57. #include uwsgi_params;
  58. proxy_pass http://zzm;
  59. # if django be used socket model to start up,using uwsgi of the following
  60. #uwsgi_pass 127.0.0.1:8000;
  61. #uwsgi_read_timeout 180;
  62. proxy_redirect off;
  63. proxy_set_header Host $host;
  64. proxy_set_header REMOTE_ADDR $remote_addr;
  65. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  66. real_ip_recursive on;
  67. }
  68. error_page 404 /404.html;
  69. location = /40x.html {
  70. }
  71. error_page 500 502 503 504 /50x.html;
  72. location = /50x.html {
  73. }
  74. }
  75. #配置https
  76. server {
  77. listen 443 ssl http2 default_server;
  78. listen [::]:443 ssl http2 default_server;
  79. server_name cola666.top;
  80. root /usr/share/nginx/html;
  81. ssl_certificate /var/xxx.pem;#ssl两个证书路径
  82. ssl_certificate_key /var/xxx.key;
  83. ssl_session_cache shared:SSL:1m;
  84. ssl_session_timeout 10m;
  85. ssl_ciphers HIGH:!aNULL:!MD5;
  86. ssl_prefer_server_ciphers on;
  87. # Load configuration files for the default server block.
  88. include /etc/nginx/default.d/*.conf;
  89. #静态资源路径
  90. location /static{
  91. alias /var/static;
  92. }
  93. location / {
  94. #缓存路径
  95. proxy_cache tmp-test;
  96. proxy_cache_key $uri;
  97. add_header Access-Control-Allow-Origin *;
  98. add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept";
  99. add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
  100. #include uwsgi_params;
  101. #uwsgi_pass 127.0.0.1:8000;
  102. proxy_pass http://zzm;
  103. proxy_redirect off;
  104. #将客户端ip地址交给服务器后端
  105. proxy_set_header Host $host;
  106. proxy_set_header REMOTE_ADDR $remote_addr;
  107. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  108. real_ip_recursive on;
  109. }
  110. error_page 404 /404.html;
  111. location = /40x.html {
  112. }
  113. error_page 500 502 503 504 /50x.html;
  114. location = /50x.html {
  115. }
  116. }
  117. }
  118. ```![](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. PowerPC-关闭中断后,还能报sc中断?

    https://mp.weixin.qq.com/s/OsHIfPzYUagaTe5J88dIIg   一. 基本问题   FreeRTOS有一个宏,portYIELD_WITHIN_API(), 意 ...

  2. JAVASE(十八) 反射: Class的获取、ClassLoader、反射的应用、动态代理

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 1.反射(JAVA Reflection)的理解 1.1 什么是反射(JAVA Reflection) ...

  3. 使用turtle库绘制一个红色五角星图形‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪

    import turtle n = eval(input("请输入五角星的长度")) turtle.begin_fill() #开始填充颜色 i = 0 while i < ...

  4. Java实现 蓝桥杯 算法训练 多阶乘计算

    试题 算法训练 多阶乘计算 问题描述 我们知道,阶乘n!表示n*(n-1)(n-2)-21, 类似的,可以定义多阶乘计算,例如:5!!=531,依次可以有n!..!(k个'!',可以简单表示为n(k) ...

  5. Java实现 LeetCode 722 删除注释(暴力筛选)

    722. 删除注释 给一个 C++ 程序,删除程序中的注释.这个程序source是一个数组,其中source[i]表示第i行源码. 这表示每行源码由\n分隔. 在 C++ 中有两种注释风格,行内注释和 ...

  6. Java实现 LeetCode 467 环绕字符串中唯一的子字符串

    467. 环绕字符串中唯一的子字符串 把字符串 s 看作是"abcdefghijklmnopqrstuvwxyz"的无限环绕字符串,所以 s 看起来是这样的:"-zabc ...

  7. Java实现 LeetCode 42 接雨水

    42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这 ...

  8. Java实现第十届蓝桥杯组队

    试题 A: 组队 本题总分:5 分 [问题描述] 作为篮球队教练,你需要从以下名单中选出 1 号位至 5 号位各一名球员, 组成球队的首发阵容. 每位球员担任 1 号位至 5 号位时的评分如下表所示. ...

  9. Linux文件处理命令 ls 详解

    Linux系统的应用场景最多的就是用作服务器的系统了,简洁,安全,高效,一般我们服务器端不会安装Linux的图形化界面,虽然现在一些Linux发行版的图形界面也很漂亮,但是,服务器最主要的是高效.所以 ...

  10. HDFS ha 格式化报错:a shared edits dir must not be specified if HA is not enabled.

    错误内容: Formatting using clusterid: CID-19921335-620f-4e72-a056-899702613a6b2019-01-12 07:28:46,986 IN ...