Linux服务 Nginx Proxy

Linux服务 Nginx Proxy
    正向代理服务器是客户端的代理,代理服务器会代替客户端去请求任何客户端发送给它的地址去寻找资源,然后返回给客户端并且这个资源还可以缓存到本地,供以后请求同一资源的其他客户端使用;例子:Aclient要去google请求一个txt文档,它就会将请求发送给代理服务器,然后代理服务器去帮助Aclient去google请求这个txt资源,然后将这个txt缓存到本地一个份再将这个txt资源返回给Aclient;Aclient又要去请求baidu的一个JPG图片,Aclient还是会将请求发送给代理服务器,代理服务器就会去百度以自己为客户端请求这个JPG图片,然后再返回给客户端;
    反向代理服务器是服务器的代理,当客户端向要去某台服务器请求资源时,如果这个网站做了反向代理的话,客户端其实请求的是反向代理服务器,客户端并没有直接接触到后端真正的服务器,这样可以提高服务器的安全性;这个反向代理接受到请求后,会对请求报文进行拆包,分析其请求的地址,如果正好支持对此地址的代理的话,就会重新对其封包,然后以自己为客户端发送给后端真正的服务器,服务器收到请求后会进行处理,然后将响应报文发送给反向代理服务器,反向代理还会对响应报文进行拆包,然后再封装成适合客户端的响应报文,发送给请求客户端;
        Note:反代仅支持到部分网站请求资源,而正代支持到所有网站请求资源;
    Nginx中后端的服务器一般被称为upstream server(上游服务器);
        Nginx做为反向代理服务器可以实现动静分离,将静态资源和动态资源分别放在不同的文件路径或者服务器中,这样可以增加请求速度;
        Nginx作为反向代理服务器本身是不提供缓存的,这样做是为了减少负载,但是我们可以让其直接连接外部的缓存服务器,来提供缓存;为什么要提供缓存呢?因为提供缓存可以加速访问速度,因为缓存是以key-value的方式存储的,其中的key是客户端请求的URL经过hash后的结果(存储于内存中),value是请求的资源(存储于磁盘中);都是查找资源,为什么key-value会快呢?这是因为hash的查找方式为O(1),也就是说不管查找的是什么,文件名有多长,其给出结果的时间都是相同的(补充:其实查找资源也是放在文件系统中查找的,但是这里的目录树层级非常的少,所以查找起来更快;比如只有多一个以及子目录,然后将资源都放在以及子目录中,如果资源实在是太多的话就设置二级子目录,以此类推,但是子目录层级不会太深;关于子目录的个数设置请看下文的proxy_cache_path);相对来说:如果不用缓存,而是去文件系统中查找,因为文件系统的存储结构是树状的,查找一个文件要对很多路径进行遍历,这是极其耗费时间的,所以我们会使用缓存来提速;并且反代使用缓存还可以减少自己本身的负载,不用再次封包请求后端服务器,减少cpu的工作,还可以节省网络带宽;在互联网上还有一句话:cache is king! 
        一般的组建结构为:前段为nginx服务器作为反向代理,而后端进行动静分离,动态服务器做成一个集群,为了增加可靠性,静态服务器也做成一个集群,目的是同样的,但是一般在静态集群前面会搭建缓存服务器(缓存服务器本身也是一个反代),当用户请求静态资源时,如果缓存服务器中没有就去后端的静态资源服务器中请求,并且缓存后端服务响应的资源,再返回给客户端;
    Nginx还支持根据后端服务器的负载状况来进行负载均衡调度,如果后端服务器宕机,还可以自动的将其下线,也就是不再将请求发送给这台服务器;
    Nginx作为反代的并发:Nginx作为反代时,在前端要监听在某些套接字上,用来接收客户端的请求,在后端要使用某些套接字来向后端upstream server请求资源;一般Linux系统上只有65535个接口,所以平均一下能处理的并发请求数为三万个左右;千万不要小看这三万个,其实对于一些中小型站点已经完全够用了;我们真正使用时也不会让其达到这个数字,这只是理论上限;如果并发量一台Nginx反向代理不够用的话,可以再加一台,然后通过DNS进行轮询调度;
    Nginx反向代理模块:ngx_http_proxy_module
        可以实现将请求传递给其他服务器;
        Nginx反代接收到http请求报文以后,会对其进行拆包已了解其请求的内容,然后会匹配设置的location,如果匹配到的是ngx_http_proxy_module中的某个功能选项(proxy_pass)的话,就会根据信息重新构建报文(以自己为客户端),向其中设置的服务器地址发起请求;
            例子:
                location / {
    proxy_pass       http://localhost:8000;
    proxy_set_header Host      $host;
    proxy_set_header X-Real-IP $remote_addr;
}
location /centos6/ {
    proxy_pass http://192.168.0.9/;
}
location ~* \.(jpg|png)$ {
    proxy_pass http://192.168.0.9;
}   ← 当location中的路径为正则表达式时,proxy_pass后面的地址只能是纯地址,后面不可以加路径;比如:proxy_pass  http://192.168.0.9/html;是错误的。如果还是用了URL重写的话,最终代理的是重写后的地址;
        1.proxy_set_header:允许对传递给代理服务器的请求头重新定义或追加字段。该值可以包含文本、变量及其组合;
            Syntax:    proxy_set_header field value;
Default:    proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
Context:    http, server, location
例子:
location / {
    poxy_pass http://192.168.0.9:80/;
    proxy_set_header X-Real-IP $remote_addr; ←$remote_addr为客户端的ip地址;我们可以通过设置后端的httpd服务的日志格式将这个变量添加进去,然后查看日志时就可以显示是哪台客户端发起的请求了,默认情况下只有代理服务器的ip地址,不会出现客户端的ip地址的;→LogFormat "%{X-Real-IP}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    proxy_set_header Host $host;   ←$host为nginx自带的变量,表示服务器的主机名;可以在官网中查看这些变量所代表的意义;www.nginx.org;
}
        2. proxy_http_version:以指定的http版本向外发送代理请求;可以实现客户端连接nginx反向代理服务器时为长连接,而nginx反向代理服务器连接后端upstream server时使用短连接;
            Syntax:    proxy_http_version 1.0 | 1.1;
Default:    proxy_http_version 1.0;
Context:    http, server, location
        3. proxy_cache:启用代理缓存;
            Syntax:    proxy_cache zone | off;
Default:    proxy_cache off;
Context:    http, server, location
        4. proxy_cache_path:指明存放缓存的路径;
            Syntax:    proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
Default:    —
Context:    http
levels:用来设置子目录的层级;
    key_zone=name:size:在内存中开辟出一块空间来存储key;
例子:
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;
    其中1表示一级子目录的名字为几个字符,2表示二级子目录的名字为两个字符;如果想要设置三级子目录的话,可以在后面接“:”和数字;
例子的结果:
/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c
        5. proxy_cache_methods:设置仅缓存客户端使用特定方法请求的资源;
            Syntax:    proxy_cache_methods GET | HEAD | POST ...;
Default:    proxy_cache_methods GET HEAD;
Context:    http, server, location
        6. proxy_cache_use_stale:是否使用过期的缓存;比如当后端服务器宕机时,无法请求新的资源(相对于这个过期的缓存来说),这时是否使用现有的缓存响应客户端(这个缓存虽然过期,但是不代表后端服务器的内容也变化了啊,可能这个缓存的资源还是跟后端服务器中的资源是一样的);
            Syntax:    proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | off ...;
Default:    proxy_cache_use_stale off;
Context:    http, server, location
        7. proxy_cache_valid:自定义缓存时间;
            Syntax:    proxy_cache_valid [code ...] time;
Default:    —
Context:    http, server, location
    code:为响应码类型;
例子:
proxy_cache_valid 200 302  10m;
proxy_cache_valid 404      1m;
        例子:
            vim /etc/nginx/nginx.conf
                proxy_cache_path /cache/nginx/ levels=1:2 keys_zone=mycache:12m;
            mkdir –pv /cache/nginx/
chown nginx:nginx –R /cache/nginx
vim /etc/nginx/cong.d/default.conf
    location /bbs/ {
        proxy_cache mycache;
        proxy_cache_valid 200 20m;
        proxy_cache_valid 301 302 10m;
        proxy_cache_valid any 1m;
        proxy_cache_use_stale error timeout http_500 http_502;
        proxy_pass http://192.168.0.9/bbs/;
        proxy_set_header X-Real-IP $remote_addr;
    }
service nginx configtest
service nginx reload
浏览器键入:http://192.168.0.7/bbs/
ls –R /cache/nginx/
        8. proxy_connect_timeout:设置proxy服务器与upstream server的连接超时时间;
            Syntax:    proxy_connect_timeout time;
Default:    proxy_connect_timeout 60s;
Context:    http, server, location
        9. proxy_hide_header:设置当proxy返回给客户端响应报文时,不封装哪些首部
            Syntax:    proxy_hide_header field;
Default:    —
Context:    http, server, location
        10. proxy_read_timeout:proxy等待upstream响应的超时时间;
            Syntax:    proxy_read_timeout time;
Default:    proxy_read_timeout 60s;
Context:    http, server, location
        11. proxy_cache_bypass:定义什么情况下不缓存;
            Syntax:    proxy_cache_bypass string ...;
Default:    —
Context:    http, server, location
例子:
    proxy_cache_bypass  $cookie_nocache  $arg_nocache  $arg_comment;
proxy_cache_bypass  $http_pragma     $http_authorization;
    Nginx负载均衡模块:ngx_http_upstream_module
        1. upstream:定义一组服务器。服务器可以监听不同的端口。此外,可以混合监听TCP和unix域套接字的服务器。
Syntax:    upstream name { ... }
Default:    —
Context:    http
例子:
            upstream backend {
                server backend1.example.com weight=5;
                server 127.0.0.1:8080       max_fails=3 fail_timeout=30s;
                server unix:/tmp/backend3;
server backup1.example.com  backup;
}
        2. server:指定欲进行负载均衡的server地址;
            Syntax:    server address [parameters];
Default:    —
Context:    upstream
    parameters:
        weight=number:指定server的权重;
        max_fails=number:指定proxy检查后端upstream server失败多少次后将其标记为失败;
        fail_timeout=time:指定检查超时时间;
        down:将此server标记为永久不可用状态;
        backup:标记此服务器为备用服务器;只要有一个正常服务器可以运行时,备用服务器就不会被启用;
        例子:为显示效果,要将之前设置的缓存都注释掉;
            在192.168.0.9和192.168.0.13这两台主机上都要开启http服务并且在/var/www/html/这个目录中编辑一下index.html,随便填写一些不同的内容即可;
            vim /etc/nginx/nginx.conf     在http{}中添加以下内容
                upstream upservers {
                    server 192.168.0.9;
                    server 192.168.0.13;
                }
            vim /etc/nginx/cong.d/default.cong
                location /bbs/ {
                    #proxy_cache mycache;
        #proxy_cache_valid 200 20m;
        #proxy_cache_valid 301 302 10m;
        #proxy_cache_valid any 1m;
        #proxy_cache_use_stale error timeout http_500 http_502;
        proxy_pass http://upservers/;
        proxy_set_header X-Real-IP $remote_addr;
                 }
            浏览器键入:http://192.168.0.7/bbs  然后连续刷新页面;
        3. sticky:进行会话绑定;
            Syntax:    sticky cookie name [expires=time] [domain=domain] [httponly] [secure] [path=path];
sticky route $variable ...;
sticky learn create=$variable lookup=$variable zone=name:size [timeout=time] [header] [sync];
Default:    —
Context:    upstream
        4. least_conn:按照最少连接来将请求调度至upstream server(类似于WLC算法);
            Syntax:    least_conn;
Default:    —
Context:    upstream
        5. keepalive:设置proxy与upstream server的持久连接时间;一般后端为http时不使用持久连接,这样可以提高并发数量,如果后端为缓存服务器的话可以使用持久连接,因为与缓存交互的数据比较多,所以可以减少反复建立和拆除连接的损耗;
            Syntax:    keepalive connections;
Default:    —
Context:    upstream
        6. health_check:对后端服务器组中的主机进行阶段性的健康状态监测;
            Syntax:    health_check [parameters];
Default:    —
Context:    location
    Nginx FastCGI模块:ngx_http_fastcgi_module
        用来与上游的fastcgi服务器交流数据;因为nginx与httpd不同,没有php的模块,所以只能使用cgi协议;
        1. fastcgi_pass:指定上游服务器(PHP)地址;
            Syntax:    fastcgi_pass address;
Default:    —
Context:    location, if in location
        2. fastcgi_index:设置主页;
            Syntax:    fastcgi_index name;
Default:    —
Context:    http, server, location
        3. fastcgi_param:设置传递给后端FastCGI服务器(PHP)的参数(路径);
            Syntax:    fastcgi_param parameter value [if_not_empty];
Default:    —
Context:    http, server, location
        例子(LNMP):关闭防火墙
            yum install php-fpm
            yum install php-mysql
            yum install mysql-server
            service php-fpm start
            vim /etc/nginx/conf.d/default.conf
                    location ~ \.php$ {
                        root           /usr/share/nginx/html/;
                        fastcgi_pass   127.0.0.1:9000;
                        fastcgi_index  index.php;
                        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                        include        fastcgi_params;
                    }
vim /usr/share/nginx/html/index.php
    <?php
        phpinfo();
    ?>
service nginx configtest
service nginx reload
浏览器键入http://192.168.0.7/index.php
        4. fastcgi_cache_path:设置缓存路径;
            Syntax:    fastcgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
Default:    —
Context:    http
        5. fastcgi_cache:指设置启用缓存的位置;
            Syntax:    fastcgi_cache zone | off;
Default:    fastcgi_cache off;
Context:    http, server, location
 

 

    注:根据马哥视频做的学习笔记,如有错误,欢迎指正;侵删;

转载于:https://www.cnblogs.com/guowei-Linux/p/11072867.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在Linux上搭建NGINX服务器,您可以按照以下步骤进行: 1. 安装Linux操作系统,例如Ubuntu或CentOS等。 2. 打开终端或SSH会话,并使用管理员权限运行命令更新系统软件包。例如,在Ubuntu上,您可以使用以下命令更新软件包: ``` sudo apt update sudo apt upgrade ``` 3. 安装NGINX软件。在Ubuntu上,您可以使用以下命令安装NGINX: ``` sudo apt install nginx ``` 4. 启动NGINX服务器。在Ubuntu上,您可以使用以下命令启动NGINX: ``` sudo systemctl start nginx ``` 5. 验证NGINX服务器是否正在运行。您可以使用以下命令检查NGINX服务器的状态: ``` sudo systemctl status nginx ``` 如果服务器正在运行,您将看到类似以下内容的输出: ``` ● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2023-02-15 09:00:00 EST; 10s ago ... ``` 6. 配置NGINX服务器。您可以编辑NGINX的配置文件来配置服务器。例如,在Ubuntu上,您可以使用以下命令编辑默认配置文件: ``` sudo nano /etc/nginx/sites-available/default ``` 7. 在编辑器中配置您的NGINX服务器。例如,您可以指定NGINX监听的端口,设置网站根目录等。 8. 保存并退出编辑器。在nano编辑器中,您可以使用Ctrl + X,然后输入“y”并按Enter保存更改。 9. 重新加载NGINX配置。在Ubuntu上,您可以使用以下命令重新加载配置文件: ``` sudo systemctl reload nginx ``` 您可以通过访问您的服务器的IP地址或域名来验证您的配置是否正确。如果一切正常,您将看到NGINX默认欢迎页面。 ### 回答2: Linux是一种自由和开放源代码的类Unix操作系统,因为它具有出色的稳定性和性能,因此已经成为了运行服务器的首选操作系统Nginx是一款高性能、轻量级的HTTP服务器,它可以作为反向代理服务器、负载均衡器、HTTP缓存和TLS终端等多种用途。Nginx在响应高负载时具有极佳的性能表现,因此也成为了非常流行的Web服务器之一。 在Linux上搭建Nginx服务器的流程如下: 1. 安装Linux系统:选择适合自己的Linux发行版,可以选择Ubuntu、CentOS等。 2. 安装Nginx:在Linux中使用包管理器来安装Nginx,比如在Ubuntu上可以使用apt-get来安装。命令:sudo apt-get install nginx。 3. 启动Nginx:完成安装后,使用以下命令启动Nginx服务:sudo service nginx start。 4. 配置NginxNginx的主配置文件是nginx.conf,可以在其中对Nginx进行配置,例如监听的端口号、虚拟主机等。 5. 配置虚拟主机:虚拟主机可用于为多个域名提供服务,并根据不同域名分配不同的网站内容。在Nginx中,可以在nginx.conf中添加server {}块配置虚拟主机。示例: ``` server { listen 80; server_name www.example.com; root /var/www/example; index index.html; } ``` 6. 添加网站内容:在虚拟主机的root目录下添加网站内容,例如/index.html。 7. 测试Nginx:在浏览器中输入虚拟主机的域名即可访问网站。 除此之外,还可以配置Nginx实现反向代理、负载均衡、HTTPS终端等常见功能,具体实现方法可以查看官方文档或相关教程。在搭建Nginx服务器时,需要保证服务器的安全性和稳定性,例如配置防火墙、定期备份等措施。 ### 回答3: Linux是一种操作系统,而nginx是一种高性能的Web服务器和反向代理服务器,它具有高效的负载分配和缓存能力,被广泛应用于各种互联网应用场景中。在Linux上搭建nginx服务器可以为网站提供快速、稳定、可靠的服务,实现高并发、高可用的目的。 搭建nginx服务器需要以下步骤: 1.安装Linux系统 首先需要选择并安装适合的Linux操作系统。常见的Linux发行版有CentOS、Ubuntu等,选择哪种操作系统主要取决于自己的需求和使用习惯。 2.安装nginx 安装nginx可以通过源码编译或者包管理器安装。如果选择源码编译,需要先下载nginx源码,然后解压缩并进行编译、安装。如果选择包管理器安装,直接使用yum或者apt-get等命令即可。 3.配置nginx 配置nginx主要包括两个方面:配置基本设置和配置虚拟主机。首先需要编辑nginx配置文件,通常是在/usr/local/nginx/conf目录下的nginx.conf文件中修改。然后需要设置虚拟主机,一般采用server块实现。 4.启动nginx 配置完成后,使用命令“/usr/local/nginx/sbin/nginx -t”检查nginx配置文件是否正确。如正确,则使用“/usr/local/nginx/sbin/nginx”启动nginx。 5.测试nginx 测试nginx是否成功启动,可以使用浏览器访问nginx服务器的IP地址或者域名,如果能够正常显示页面,则表明nginx服务器已经成功搭建起来了。 在实际运用中,需要根据需求进行一系列的优化和配置调整,如设置缓存、gzip压缩、SSL证书等,以提高nginx服务器的性能和安全性。总之,Linux搭建nginx服务器是一个相对简单但也需要耐心和细心的过程,只需要按照上述步骤进行操作,即可完成nginx服务器的搭建。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值