首页
关于
Search
1
给你10个市场数据调研报告的免费下载网站!以后竞品数据就从这里找!
182 阅读
2
php接口优化 使用curl_multi_init批量请求
144 阅读
3
《从菜鸟到大师之路 ElasticSearch 篇》
107 阅读
4
2024年备考系统架构设计师
104 阅读
5
PHP 文件I/O
92 阅读
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
登录
Search
标签搜索
php函数
php语法
性能优化
安全
错误和异常处理
问题
vue
Composer
Session
缓存
框架
Swoole
api
并发
异步
正则表达式
php-fpm
mysql 索引
开发规范
协程
dafenqi
累计撰写
786
篇文章
累计收到
28
条评论
首页
栏目
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
副业
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
页面
关于
搜索到
14
篇与
的结果
2023-11-20
nginx+php+mysql
nginx下载安装https://nginx.org/download yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel #编译环境 cd /opt wget https://nginx.org/download/nginx-1.25.3.tar.gz tar zxvf nginx-1.25.3.tar.gz cd nginx-1.25.3 mkdir -p /www/nginx ./configure --prefix=/www/nginx make && make install启动/www/nginx/sbin/nginx常用指令nginx -V 查看版本,以及配置文件地址nginx -v 查看版本nginx -c filename 指定配置文件nginx -h 帮助nginx -s reload|reopen|stop|quit // 重新加载配置|重启|停止|退出 nginx")重新加载配置|重启|停止|退出 nginxnginx -t //查看配置是否有语法错误nginx -c /usr/local/etc/nginx/nginx.conf //启动是加载指定nginx.conf文件建立软链接建立软链接目的是省去根目录快捷操作nginx[root@xxx opt]# ln -s /www/nginx/sbin/nginx /usr/sbin/ [root@xxx opt]# nginx -v nginx version: nginx/1.25.3 # 删除软连接 rm -rf /usr/sbin/nginx安装启动好php-fpm后,修改nginx.conf并重启nginx把 /scripts$fastcgi_script_name** 改成 **$document_root$fastcgi_script_namelocation ~ \.php$ { root /www/nginx/php; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #支持解析php文件 include fastcgi_params; } 重启nginxnginx -t nginx -s reloadPS:如果还报错 [error] 37432#0: *85 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream 那一定是php文件路径不对phpyum方式安装用yum方式安装php最新版1 安装 epel-release源和 源管理工具yum-utilsyum -y install epel-release yum-utils2 安装Remi软件源Remi软件源官方地址: https://rpms.remirepo.net/CentOS7安装:yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpmCentOS7启动php模块并安装:yum启动php模块,根据需要选择自己格式的版本,如remi-php74模块,就是php7.4版本。:yum-config-manager --enable remi-php80 #启用remi源的php8.0模块注:如果显示没有这个命令,则需要先安装yum -y install yum-utils 插件。安装php及相关扩展:yum install php php-cli php-fpm php-mysqlnd php-zip php-devel php-gd php-mbstring php-curl php-xml php-pear php-bcmath php-json php-redis安装成功:php -v 查看版本为php8.0版本3 启动php-fpm[root@xx logs]# whereis php-fpm php-fpm: /usr/sbin/php-fpm /etc/php-fpm.d /etc/php-fpm.conf /usr/share/man/man8/php-fpm.8.gz [root@xx logs]# systemctl start php-fpm mysqlyum安装mysql MySQL三种安装方法(yum安装、编译安装、二进制安装)yum安装mysql1.卸载旧版mysql如果安装过先卸载,第一次安装略过此步[root@bunian etc]# rpm -qa | grep mysql mysql-community-common-5.7.38-1.el7.x86_64 mysql-community-client-5.7.38-1.el7.x86_64 mysql80-community-release-el7-6.noarch mysql-community-server-5.7.38-1.el7.x86_64 mysql-community-libs-5.7.38-1.el7.x86_64 # 所有组件都要删除 [root@bunian etc]# rpm -e --nodeps mysql-community-common-5.7.38-1.el7.x86_64 [root@bunian etc]# rpm -e --nodeps mysql-community-client-5.7.38-1.el7.x86_64 [root@bunian etc]# rpm -e --nodeps mysql80-community-release-el7-6.noarch [root@bunian etc]# rpm -e --nodeps mysql-community-server-5.7.38-1.el7.x86_64 [root@bunian etc]# rpm -e --nodeps mysql-community-libs-5.7.38-1.el7.x86_64 # 清理yum headers cache [root@bunian etc]# yum clean all2.安装2.1 rpm安装yum源[root@bunian tmp]# rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm2.2 下载rpm源文件再安装[root@bunian tmp]# wget https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm [root@bunian tmp]# yum localinstall mysql80-community-release-el7-6.noarch.rpm3.选择mysql版本[root@bunian tmp]# yum repolist all | grep mysql mysql-cluster-7.5-community/x86_64 MySQL Cluster 7.5 Comm 禁用 mysql-cluster-7.5-community-source MySQL Cluster 7.5 Comm 禁用 mysql-cluster-7.6-community/x86_64 MySQL Cluster 7.6 Comm 禁用 mysql-cluster-7.6-community-source MySQL Cluster 7.6 Comm 禁用 mysql-cluster-8.0-community/x86_64 MySQL Cluster 8.0 Comm 禁用 mysql-cluster-8.0-community-debuginfo/x86_64 MySQL Cluster 8.0 Comm 禁用 mysql-cluster-8.0-community-source MySQL Cluster 8.0 Comm 禁用 mysql-connectors-community/x86_64 MySQL Connectors Commu 启用: 192 mysql-connectors-community-debuginfo/x86_64 MySQL Connectors Commu 禁用 mysql-connectors-community-source MySQL Connectors Commu 禁用 mysql-tools-community/x86_64 MySQL Tools Community 启用: 90 mysql-tools-community-debuginfo/x86_64 MySQL Tools Community 禁用 mysql-tools-community-source MySQL Tools Community 禁用 mysql-tools-preview/x86_64 MySQL Tools Preview 禁用 mysql-tools-preview-source MySQL Tools Preview - 禁用 mysql57-community/x86_64 MySQL 5.7 Community Se 禁用 mysql57-community-source MySQL 5.7 Community Se 禁用 mysql80-community/x86_64 MySQL 8.0 Community Se 启用: 343 mysql80-community-debuginfo/x86_64 MySQL 8.0 Community Se 禁用 mysql80-community-source MySQL 8.0 Community Se 禁用默认是开启8.0版本4.去除公钥检索校验 (最重要的地方)这个地方容易出错,原因是没有去除校验导致服务安装后无法启动#gpgcheck改成0 [root@bunian tmp]# vim /etc/yum.repos.d/mysql-community.repo [mysql80-community] name=MySQL 8.0 Community Server baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/7/$basearch enabled=1 gpgcheck=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql5.安装mysql[root@bunian tmp]# yum install mysql-community-server6.配置mysql[root@bunian tmp]# vim /etc/my.cnf [mysqld] # 不区分大小写 lower_case_table_names=1 # 端口号 port = 3306lower_case_table_names7.启动mysql[root@bunian tmp]# systemctl start mysqld8.修改mysql root密码及外网访问初始密码在这里/var/log/mysqld.log# 密码是:6;-#?gn*q;0H [root@bunian etc]# grep 'temporary password' /var/log/mysqld.log 2022-06-21T03:25:39.021858Z 1 [Note] A temporary password is generated for root@localhost: 6;-#?gn*q;0H登录mysql修改密码[root@bunian etc]# mysql -h localhost -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 11 Server version: 8.0.35 Copyright (c) 2000, 2023, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpasswd'; mysql> use mysql; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed修改外网访问在 mysql 数据库的 user 表中查看当前 root 用户的相关信息select host, user, authentication_string, plugin from user;执行完上面的命令后会显示一个表格查看表格中 root 用户的 host,默认应该显示的 localhost,只支持本地访问,不允许远程访问。授权 root 用户的所有权限并设置远程访问update user set host='%' where user='root'; GRANT ALL ON *.* TO 'root'@'%'; GRANT ALL ON *.* TO 'root'@'%';执行两次 GRANT ALL ON . TO 'root'@'%';刷新权限mysql> flush privileges;9.检验是否安装成功# 查看mysql端口号 [root@bunian etc]# netstat -nltp | grep 3306 tcp6 0 0 :::33060 :::* LISTEN 1292/mysqld tcp6 0 0 :::3306 :::* LISTEN 1292/mysqld 10.Navicat连接用Navicat连接报错:2059 - Authentication plugin 'caching_sha2_password' cannot be loaded原因以及解决办法由于目前已有的客户端连接软件还不支持Mysql8新增加的加密方式: caching_sha2_password 所以我们需要修改用户的加密方式,将其改为老的加密验证方式: mysql_native_password#登录 mysql -h localhost -p #选择数据库 use mysql; # 注意:先 select host, user from user; 查看host值再决定以下是'root'@'%' 还是 'root'@'localhost' ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的数据库密码'; #刷新权限 FLUSH PRIVILEGES; 11.php连接mysql连接Navicat创建test数据库、new表vim /www/nginx/php/index.php<?php $servername = "localhost"; $username = "root"; $password = "password"; $dbname = "test"; // 创建连接 $conn = new mysqli($servername, $username, $password, $dbname); // 检查连接 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } // 执行查询 $sql = "SELECT * FROM new"; $result = $conn->query($sql); // 输出数据 if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - name: " . $row["name"]. "<br>"; } } else { echo "0 结果"; } //访问ip/index.php id: 1 - name: 测试文章
2023年11月20日
37 阅读
0 评论
0 点赞
2023-11-20
Nginx的安装和部署
Nginx的安装和部署Nginx简介Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。优势Nginx 可以在大多数 Unix Linux OS 上编译运行,并有 Windows 移植版。 Nginx 的1.20.0稳定版已经于2021年4月20日发布,一般情况下,对于新建站点,建议使用最新稳定版作为生产版本,已有站点的升级急迫性不高。Nginx 的源代码使用 2-clause BSD-like license。 Nginx 是一个很强大的高性能Web和反向代理服务,它具有很多非常优越的特性:在连接高并发的情况下,Nginx是Apache服务不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应。Nginx作为负载均衡服务:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。处理静态文件,索引文件以及自动索引,打开文件描述符缓冲。无缓存的反向代理加速,简单的负载均衡和容错。FastCGI,简单的负载均衡和容错。模块化的结构。包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter。如果由 FastCG或其它代理服务器处理单页中存在的多个 SSI,则这项处理可以并行运行,而不需要相互等待。支持 SSL 和 TLSSNI。Nginx代码完全用C语言从头写成,已经移植到许多体系结构和操作系统,包括:Linux、FreeBSD、Solaris、Mac OS X、AIX以及Microsoft Windows。Nginx有自己的函数库,并且除了zlib、PCRE和OpenSSL之外,标准模块只使用系统C库函数。而且,如果不需要或者考虑到潜在的授权冲突,可以不使用这些第三方库。代理服务器。作为邮件代理服务:Nginx 同时也是一个非常优秀的邮件代理服务(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。Nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持perl语法)、Bug非常少的服务。Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。使用下载在官网下载最新稳定版从源代码构建如果需要某些特殊功能,但软件包和端口不提供这些功能,则也可以从源文件编译nginx。虽然更灵活,但是这种方法对于初学者来说可能很复杂。有关更多信息,请参见从源代码构建nginx。安装下载完成后解压到不含中文(切记!)的目录启动两种方法:直接双击该目录下的"nginx.exe",即可启动nginx服务器;命令行进入该文件夹,执行start nginx命令,也会启动nginx服务器。 使用 Win+R打开运行,输入cmd,然后按Enter 首先进入nigix所在的目录,如下图所示:D:cd Environment/nginx-1.20.0 #这是我解压的目录,替换成自己的即可启动:start nginx.exe停止:nginx.exe -s stop重新加载:nginx.exe -s reload使用http://localhost:端口查看那么怎么知道自己的nginx是否启动成功:打开你的管理器,如在进程中看到两个nginx说明启动成功。打开浏览器输入http://localhost,显示以下界面即表示启动成功反代理Tomcat反向代理动态页面首先用Tomcat启动一个JavaWeb项目,Tomcat端口号为8080,响应内容如下 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("utf-8"); resp.setCharacterEncoding("utf-8"); PrintWriter out = resp.getWriter(); Cookie[] cookies = req.getCookies(); if (cookies == null) { out.write("First"); } else { out.write("上次时间是:"); for (int i = 0; i < cookies.length; i++) { if (cookies[i].getName().equals("lastTime")) { long l = Long.parseLong(cookies[i].getValue()); String s = new Date(l).toString(); out.write(s); } } } resp.addCookie(new Cookie("lastTime", System.currentTimeMillis()+"")); } 每次刷新都会动态从Cooki中获取上次时间,启动后浏览器访问http://localhost:8080/c1即可查看效果然后编辑Nginx配置文件,新增一个包upstream tomcatserver {server localhost:8080;}然后编辑server闭包,修改如下内容Listen 80;server_name localhost;location / {proxy_pass http://tomcatserver;}之后启动Nginx,访问localhost/c1即可预览效果则表示正确代理了动态页面Nginx的配置配置文件位于安装目录下的/conf/nginx.conf文件server {listen 80; #监听的端口server_name localhost; #监听的域名 #charset koi8-r; #access_log logs/host.access.log main;location / { #root html; #index index.html index.html;proxy_pass http://127.0.0.1:8081; #转发请求的地址 proxy_connect_timeout 600; proxy_read_timeout 600;}Windows下的常用命令启动服务:start nginx 退出服务:nginx -s quit 强制关闭服务:nginx -s stop 重载服务:nginx -s reload (重载服务配置文件,类似于重启,服务不会中止) 验证配置文件:nginx -t 使用配置文件:nginx -c "配置文件路径" 使用帮助:nginx -hLinux下的安装一、安装编译工具及库文件yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel二、首先要安装 PCREPCRE 作用是让 Nginx 支持 Rewrite 功能。1、下载 PCRE 安装包,下载地址: http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gzcd /usr/local/src/ wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz2、解压安装包:tar zxvf pcre-8.35.tar.gz3、进入安装包目录cd pcre-8.354、编译安装./configure make && make install5、查看pcre版本pcre-config --version安装 Nginx1、下载 Nginx,下载地址:https://nginx.org/en/download.htmlcd /usr/local/src/ wget http://nginx.org/download/nginx-1.20.0.tar.gz2、解压安装包tar zxvf nginx-1.20.0.tar.gz3、进入安装包目录cd nginx-1.20.04、编译安装./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35makemake install到此,nginx安装完成。Nginx 配置nginx.conf说明 #user nobody; worker_processes 1; #工作进程:数目。根据硬件调整,通常等于cpu数量或者2倍cpu数量。 #错误日志存放路径 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; # nginx进程pid存放路径 events { worker_connections 1024; # 工作进程的最大连接数量 } http { include mime.types; #指定mime类型,由mime.type来定义 default_type application/octet-stream; # 日志格式设置 #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 logs/access.log main; #用log_format指令设置日志格式后,需要用access_log来指定日志文件存放路径 sendfile on; #指定nginx是否调用sendfile函数来输出文件,对于普通应用,必须设置on。如果用来进行下载等应用磁盘io重负载应用,可设着off,以平衡磁盘与网络io处理速度,降低系统uptime。 #tcp_nopush on; #此选项允许或禁止使用socket的TCP_CORK的选项,此选项仅在sendfile的时候使用 #keepalive_timeout 0; #keepalive超时时间 keepalive_timeout 65; #gzip on; #开启gzip压缩服务 #虚拟主机 server { listen 80; #配置监听端口号 server_name localhost; #配置访问域名,域名可以有多个,用空格隔开 #charset koi8-r; #字符集设置 #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } #错误跳转页 #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。 # root html; #根目录 # fastcgi_pass 127.0.0.1:9000; #请求转向定义的服务器列表 # fastcgi_index index.php; # 如果请求的Fastcgi_index URI是以 / 结束的, 该指令设置的文件会被附加到URI的后面并保存在变量$fastcig_script_name中 # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; #监听端口 # server_name localhost; #域名 # ssl_certificate cert.pem; #证书位置 # ssl_certificate_key cert.key; #私钥位置 # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; #密码加密方式 # ssl_prefer_server_ciphers on; # ssl_prefer_server_ciphers on; # # location / { # root html; # index index.html index.htm; # } #} } 启动nginx服务切换目录到/usr/local/nginx/sbin下面启动nginx命令:./nginx查看nginx服务是否启动成功ps -ef | grep nginx访问站点从浏览器访问我们配置的站点ip:Nginx 其他命令以下包含了 Nginx 常用的几个命令:启动服务:./nginx 退出服务:nginx -s quit 强制关闭服务:nginx -s stop 重载服务:nginx -s reload (重载服务配置文件,类似于重启,但服务不会中止) 验证配置文件:nginx -t 使用配置文件:nginx -c "配置文件路径" 使用帮助:nginx -h
2023年11月20日
37 阅读
0 评论
0 点赞
2023-09-18
Nginx几款负载均衡第三方插件的安装与使用
Nginx几款负载均衡第三方插件的安装与使用0x01:插件说明nginx_upstream_hash :url_hash是nginx的第三方模块,nginx本身不支持,需要第三方模块。nginx在做负载均衡的时, 把转发的URL以hash的形式保存。这样可以保证同一个URL始终分给同一个real server,来提高访问速度。 ** 官网:https://github.com/evanmiller/nginx_upstream_hashnginx-upstream-fair :upstream-fair是比内建的负载均衡更加智能的负载均衡模块, 它采用的不是内建负载均衡使用的轮换的均衡算法,而是可以根据页面大小、加载时间长短智能的进行负载均衡。 官网:https://github.com/gnosek/nginx-upstream-fairngx_http_consistent_hash : 通过一致性哈希算法来选择合适的后端节点 官网:https://github.com/replay/ngx_http_consistent_hashhttps://www.nginx.com/resources/wiki/modules/consistent_hash/0x02:安装说明先分别下载这三款插件wget https://github.com/gnosek/nginx-upstream-fair/archive/master.zip -O nginx-upstream-fair.zip wget https://github.com/evanmiller/nginx_upstream_hash/archive/master.zip -O nginx_upstream_hash.zip wget https://github.com/replay/ngx_http_consistent_hash/archive/master.zip -O ngx_http_consistent_hash.zip解压对应的压缩包unzip nginx-upstream-fair-master.zip unzip nginx_upstream_hash-master.zip unzip ngx_http_consistent_hash-master.zip 查看旧Nginx的安装配置参数 /usr/local/nginx/sbin/nginx -V重新编译添加负载均衡模块./configure --prefix=/usr/local/nginx \ --user=nginx --group=nginx \ --with-http_secure_link_module \ --with-http_stub_status_module \ --with-stream_ssl_preread_module \ --with-http_ssl_module --with-http_image_filter_module \ --add-module=/home/huangjinjin/桌面/fastfds/nginx_upstream_hash-master \ --add-module=/home/huangjinjin/桌面/fastfds/nginx-upstream-fair-master \ --add-module=/home/huangjinjin/桌面/fastfds/ngx_http_consistent_hash-master关键编译参数如--add-module=nginx_upstream_hash-master文件夹安装nginxmake(1) 对于nginx_upstream_hash会出现以下错误ngx_http_upstream_hash_module 的多重定义 说明Nginx内部包含了一个同名的模块。需要对nginx_upstream_hash进行一定的代码修改,ngx_http_upstream_hash_module定义到nginx_upstream_hash-master目录修改ngx_http_upstream_hash_modulengx_module_t ngx_http_upstream_hash_module = { NGX_MODULE_V1, &ngx_http_upstream_hash_module_ctx, /* module context */ ngx_http_upstream_hash_commands, /* module directives */ NGX_HTTP_MODULE, /* module type */ NULL, /* init master */ NULL, /* init module */ NULL, /* init process */ NULL, /* init thread */ NULL, /* exit thread */ NULL, /* exit process */ NULL, /* exit master */ NGX_MODULE_V1_PADDING };修改成ngx_module_t ngx_http_upstream_hash_module_ext = { NGX_MODULE_V1, &ngx_http_upstream_hash_module_ctx, /* module context */ ngx_http_upstream_hash_commands, /* module directives */ NGX_HTTP_MODULE, /* module type */ NULL, /* init master */ NULL, /* init module */ NULL, /* init process */ NULL, /* init thread */ NULL, /* exit thread */ NULL, /* exit process */ NULL, /* exit master */ NGX_MODULE_V1_PADDING };应用这个结构体的代码一并修改。搜索ngx_http_upstream_hash_module改成ngx_http_upstream_hash_module_ext修改config配置文件ngx_addon_name=ngx_http_upstream_hash_module_ext HTTP_MODULES="$HTTP_MODULES ngx_http_upstream_hash_module_ext" NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_upstream_hash_module_ext.c" have=NGX_HTTP_UPSTREAM_HASH . auto/have ~ c文件名字也改下ngx_http_upstream_hash_module.c 改成 ngx_http_upstream_hash_module_ext.c 这样 重新configure和make 才能成功(2)对于nginx-upstream-fair会出现以下错误nginx-upstream-fair/ngx_http_upstream_fair_module.c:543:28: error: ‘ngx_http_upstream_srv_conf_t’ has no member named ‘default_port’到nginx源码目录找到src/http/ngx_http_upstream.h文件 ngx_http_upstream_srv_conf_s结构添加in_port_t default_port;经过错误修复,编译成功后,把objs目录下的nginx文件拷贝到/usr/local/nginx目录即可:cp ./objs/nginx /usr/local/nginx0x03: 基本语法nginx_upstream_hashupstream backend_server { server 127.0.0.1:5000; server 127.0.0.1:5001; server 127.0.0.1:5002; hash $request_uri; hash_again 10; # default 0 }nginx-upstream-fairupstream mongrel { fair; server 127.0.0.1:5000; server 127.0.0.1:5001; server 127.0.0.1:5002; }ngx_http_consistent_hashupstream somestream { consistent_hash $request_uri; server 127.0.0.1:5000; server 127.0.0.1:5001; server 127.0.0.1:5002; }以下三种任君选择,不过nginx_upstream_hash与nginx-upstream-fair已经很久没更新了。
2023年09月18日
61 阅读
0 评论
0 点赞
2023-09-18
yum安装nginx没有某一模块,该如何添加第三方模块?
yum安装nginx没有某一模块,该如何添加第三方模块?本文将以添加--with-stream模块为例,演示如何去添加新的模块进去。需求:生产有个接口是通过socket通信。nginx1.9开始支持tcp层的转发,通过stream实现的,而socket也是基于tcp通信。实现方法:Centos7.5下yum直接安装的nginx,添加新模块支持tcp转发; 重新编译Nginx并添加--with-stream参数。 实现过程:1.查看nginx版本模块nginx -Vnginx version: nginx/1.20.1 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) built with OpenSSL 1.1.1g FIPS 21 Apr 2020 TLS SNI support enabled configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-compat --with-debug --with-file-aio --with-google_perftools_module --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_degradation_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_mp4_module --with-http_perl_module=dynamic --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_xslt_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-stream_ssl_preread_module --with-threads --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' --with-ld-opt='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E'2.下载一个同版本可编译的nginxcd /opt wget http://nginx.org/download/nginx-1.20.1.tar.gz tar xf nginx-1.20.1.tar.gz && cd nginx-1.20.13.备份原nginx文件mv /usr/sbin/nginx /usr/sbin/nginx.bak cp -r /etc/nginx{,.bak}4.重新编译nginx检查模块是否支持,比如这次添加 limit 限流模块 和 stream 模块:./configure --help | grep limit --without-http_limit_conn_module disable ngx_http_limit_conn_module --without-http_limit_req_module disable ngx_http_limit_req_module --without-stream_limit_conn_module disable ngx_stream_limit_conn_moduleps:-without-http_limit_conn_module disable 表示已有该模块 ,编译时,不需要添加./configure –help | grep stream --without-http_upstream_hash_module disable ngx_http_upstream_hash_module --without-http_upstream_ip_hash_module disable ngx_http_upstream_ip_hash_module --without-http_upstream_least_conn_module disable ngx_http_upstream_least_conn_module --without-http_upstream_random_module disable ngx_http_upstream_random_module --without-http_upstream_keepalive_module disable ngx_http_upstream_keepalive_module --without-http_upstream_zone_module disable ngx_http_upstream_zone_module --with-stream enable TCP/UDP proxy module --with-stream=dynamic enable dynamic TCP/UDP proxy module --with-stream_ssl_module enable ngx_stream_ssl_module --with-stream_realip_module enable ngx_stream_realip_module --with-stream_geoip_module enable ngx_stream_geoip_module --with-stream_geoip_module=dynamic enable dynamic ngx_stream_geoip_module --with-stream_ssl_preread_module enable ngx_stream_ssl_preread_module --without-stream_limit_conn_module disable ngx_stream_limit_conn_module --without-stream_access_module disable ngx_stream_access_module --without-stream_geo_module disable ngx_stream_geo_module --without-stream_map_module disable ngx_stream_map_module --without-stream_split_clients_module disable ngx_stream_split_clients_module --without-stream_return_module disable ngx_stream_return_module --without-stream_set_module disable ngx_stream_set_module --without-stream_upstream_hash_module disable ngx_stream_upstream_hash_module --without-stream_upstream_least_conn_module disable ngx_stream_upstream_least_conn_module --without-stream_upstream_random_module disable ngx_stream_upstream_random_module --without-stream_upstream_zone_module disable ngx_stream_upstream_zone_moduleps:–with-stream enable 表示不支持 ,编译时要自己添加该模块根据第1步查到已有的模块,加上本次需新增的模块:--with-streamcd /opt/nginx-1.20.1 ./configure --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-file-aio --with-ipv6 --with-http_auth_request_module --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-http_perl_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-debug --with-stream以上编译时,如出现缺少依赖,一般需要安装以下模块,安装完再次编译:yum -y install libxml2 libxml2-dev libxslt-devel yum -y install gd-devel yum -y install perl-devel perl-ExtUtils-Embed yum -y install GeoIP GeoIP-devel GeoIP-data yum -y install pcre-devel yum -y install openssl openssl-devel yum -y install gcc 5.编译通过,继续验证继续输入:makemake完成后不要继续输入make install,以免现在的nginx出现问题。以上完成后,会在objs目录下生成一个nginx文件,先验证:/opt/nginx-1.12.2/objs/nginx -t /opt/nginx-1.12.2/objs/nginx -V6.替换Nginx文件并重启cp /opt/nginx-1.12.2/objs/nginx /usr/sbin/ nginx -s reload7.检查nginx -Vnginx version: nginx/1.20.1 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) built with OpenSSL 1.0.2k-fips 26 Jan 2017 TLS SNI support enabled configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-file-aio --with-ipv6 --with-http_auth_request_module --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-http_perl_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-debug --with-stream新添加的模块在最后,添加模块成功。
2023年09月18日
44 阅读
0 评论
0 点赞
2023-08-30
《从菜鸟到大师之路 Nginx 篇》
《从菜鸟到大师之路 Nginx 篇》Nginx 简介Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热更新。性能是 Nginx 最重要的考量,其占用内存少、并发能力强、能支持高达 5w 个并发连接数,最重要的是, Nginx 是免费的并可以商业化,配置使用也比较简单。官方网站:http://www.nginx.orgNginx 特点Web服务器高性能的WEB服务器软件,与Apache相比,它支持更多的并发连接且占用服务器资源少,效率高反向代理或负载均衡服务器作为负载均衡服务器,它可以作为HTTP SERVER或DB等服务的代理服务器,类似Haproxy代理软件的功能,Nginx的代理功能相对简单,效率也不及Haproxy,同时它也是一个优秀的邮件代理服务软件缓存服务器Nginx还可以作缓存服务器,类似于专业的缓存软件功能Nginx 优缺点Nginx 优点高并发:能支持1-2万甚至更多的并发连接(静态小文件)内存消耗少可以做HTTP反向代理——负载均衡的功能内置对集群节点服务器的健康性查功能,不过功能相对较弱通过cache插件可以实现缓存软件能够实现的功能Nginx 的缺点Nginx 仅能支持http、https和Email协议,这样就在适用范围上面小些,这个是它的缺点对后端服务器的健康检查,只支持通过端口来检测,不支持通过 url来检测。不支持 Session 的直接保持,但能通过 ip_hash 来解决Nginx 应用场景Nginx 的最重要的几个使用场景:静态资源服务,通过本地文件系统提供服务;反向代理服务,延伸出包括缓存、负载均衡等;API 服务, OpenResty ;对于前端来说 Node.js 并不陌生, Nginx 和 Node.js 的很多理念类似, HTTP 服务器、事件驱动、异步非阻塞等,且 Nginx 的大部分功能使用 Node.js 也可以实现,但 Nginx 和 Node.js 并不冲突,都有自己擅长的领域。Nginx 擅长于底层服务器端资源的处理(静态资源处理转发、反向代理,负载均衡等), Node.js 更擅长上层具体业务逻辑的处理,两者可以完美组合。用一张图表示:Nginx 到底可以做什么?看完这篇你就懂了!更多关于Nginx常用场景应用配置可参考:请务必收藏!Nginx 五大常见应用场景彻底搞懂 Nginx 五大应用场景!出去吹牛逼再也不担心了Apache VS NginxApache和Nginx都属于Web服务器,两者都实现了HTTP 1.1协议。无论是选择哪个,都是根据应用场景来决定的,所以些文件仅从应用场景出发,来对比两者之间的各自特点。要让正确的工具,做出正确的事。功能对比Nginx和Apache一样,都是HTTP服务器软件,在功能实现上都采用模块化结构设计,都支持通用的语言接口,如PHP、Perl、Python等,同时还支持正向和反向代理、虚拟主机、URL重写、压缩传输、SSL加密传输等。在功能实现上,Apache的所有模块都支持动、静态编译,而Nginx模块都是静态编译的,对FastCGI的支持,Apache对Fcgi的支持不好,而Nginx对Fcgi的支持非常好;在处理连接方式上,Nginx支持epoll,而Apache却不支持;在空间使用上,Nginx安装包仅仅只有几百K,和Nginx比起来Apache绝对是庞然大物。Nginx相对apache的优点轻量级,同样起web 服务,比apache 占用更少的内存及资源静态处理,Nginx 静态处理性能比 Apache 高 3倍以上抗并发,nginx 处理请求是异步非阻塞的,而apache则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能。在- - Apache+PHP(prefork)模式下,如果PHP处理慢或者前端压力很大的情况下,很容易出现Apache进程数飙升,从而拒绝服务的现象。高度模块化的设计,编写模块相对简单社区活跃,各种高性能模块出品迅速啊apache相对nginx的优点rewrite,比nginx 的rewrite 强大模块超多,基本想到的都可以找到少bug,nginx的bug相对较多超稳定Apache对PHP支持比较简单,Nginx需要配合其他后端用更多更详细的比较说明请参考:Apache VS Nginx,你选对了吗?Nginx 安装本文以CentOS 7.x 系统为例,使用 yum 安装 Nginx。yum install nginx -y安装完成后,通过 rpm -ql nginx 命令查看 Nginx 的安装信息。# Nginx配置文件 /etc/nginx/nginx.conf # nginx 主配置文件 /etc/nginx/nginx.conf.default# 可执行程序文件 /usr/bin/nginx-upgrade /usr/sbin/nginx# nginx库文件 /usr/lib/systemd/system/nginx.service # 用于配置系统守护进程 /usr/lib64/nginx/modules # Nginx模块目录 # 帮助文档 /usr/share/doc/nginx-1.16.1 /usr/share/doc/nginx-1.16.1/CHANGES /usr/share/doc/nginx-1.16.1/README /usr/share/doc/nginx-1.16.1/README.dynamic /usr/share/doc/nginx-1.16.1/UPGRADE-NOTES-1.6-to-1.10 # 静态资源目录 /usr/share/nginx/html/404.html /usr/share/nginx/html/50x.html /usr/share/nginx/html/index.html # 存放Nginx日志文件 /var/log/nginx主要关注的文件夹有两个:/etc/nginx/conf.d/是子配置项存放处,/etc/nginx/nginx.conf 主配置文件会默认把这个文件夹中所有子配置项都引入;/usr/share/nginx/html/静态文件都放在这个文件夹,也可以根据你自己的习惯放在其他地方;Nginx 常用命令systemctl 系统命令:# 开机配置 systemctl enable nginx # 开机自动启动 systemctl disable nginx # 关闭开机自动启动 # 启动Nginx systemctl start nginx # 启动Nginx成功后,可以直接访问主机IP,此时会展示Nginx默认页面 # 停止Nginx systemctl stop nginx # 重启Nginx systemctl restart nginx # 重新加载Nginx systemctl reload nginx # 查看 Nginx 运行状态 systemctl status nginx # 查看Nginx进程 ps -ef | grep nginx # 杀死Nginx进程 kill -9 pid # 根据上面查看到的Nginx进程号,杀死Nginx进程,-9 表示强制结束进程Nginx 应用程序命令:nginx -s reload # 向主进程发送信号,重新加载配置文件,热重启 nginx -s reopen # 重启 nginx -s stop # 快速关闭 nginx -s quit # 等待工作进程处理完成后关闭 nginx -T # 查看当前 Nginx 最终的配置 nginx -t # 检查配置是否有问题Nginx 配置文件Nginx 的配置文件结构如下:# main段配置信息 user nginx; # 运行用户,默认即是nginx,可以不进行设置 worker_processes auto; # Nginx 进程数,一般设置为和 CPU 核数一样 error_log /var/log/nginx/error.log warn; # Nginx 的错误日志存放目录pid /var/run/nginx.pid; # Nginx 服务启动时的 pid 存放位置 # events段配置信息 events { use epoll; # 使用epoll的I/O模型(如果你不知道Nginx该使用哪种轮询方法,会自动选择一个最适合你操作系统的) worker_connections 1024; # 每个进程允许最大并发数 } # 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; # Nginx访问日志存放位置 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; # 加载子配置项 # server段配置信息 server { listen 80; # 配置监听的端口 server_name localhost; # 配置的域名 # location段配置信息 location / { root /usr/share/nginx/html; # 网站根目录 index index.html index.htm; # 默认首页文件 deny 172.168.22.11; # 禁止访问的ip地址,可以为all allow 172.168.33.44;# 允许访问的ip地址,可以为all } error_page 500 502 503 504 /50x.html; # 默认50x对应的访问页面 error_page 400 404 error.html; # 同上 } }main 全局配置,对全局生效;events 配置影响 Nginx 服务器与用户的网络连接;http 配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置;server 配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块;location 用于配置匹配的 uri ;upstream 配置后端服务器具体地址,负载均衡配置不可或缺的部分;更多关于Nginx配置文件的介绍可以参考下列文章:史上最全的Nginx配置参数中文说明Nginx 常用配置汇总!从入门到干活足矣Nginx 实践:location 路径匹配如果你平时配置Nginx比较频繁,我推荐你使用这个神器:强大!Nginx 配置在线一键生成“神器”Nginx常用的内置变量Nginx 的进程模型Nginx 服务器,正常运行过程中:多进程:一个 Master 进程、多个 Worker 进程Master 进程:管理 Worker 进程对外接口:接收外部的操作(信号)对内转发:根据外部的操作的不同,通过信号管理 Worker监控:监控 worker 进程的运行状态,worker 进程异常终止后,自动重启 worker 进程Worker 进程:所有 Worker 进程都是平等的实际处理:网络请求,由 Worker 进程处理;Worker 进程数量:在 nginx.conf 中配置,一般设置为核心数,充分利用 CPU 资源,同时,避免进程数量过多,避免进程竞争 CPU 资源,增加上下文切换的损耗。为什么Nginx功能如此强大,可以参考:Nginx为什么高效?一文搞明白Nginx核心原理从 Nginx 优秀的核心架构设计,揭秘其为何能支持高并发?Nginx优化配置其实核心内容主要是通过修改 Nginx 配置文件来进行调优的!Nginx优化配置详解加速 Nginx 响应的 5 个措施!在我们的日常工作学习中,我们会该如何去优化自己的Nginx服务器?遇到以下问题我们该如何处理呢?如何自定义返回给客户端的404错误页面如何查看服务器状态信息如何优化Nginx并发量.......这些问题都可以参考这篇文章的解决方案:Nginx 高性能优化配置实战总结Nginx 是如何实现并发的?为什么 Nginx 不使用多线程?Nginx常见的优化手段有哪些?502错误可能原因有哪些?这种面试问题你肯定是经常被问到。所以,Nginx 如何实现高并发?常见的优化手段有哪些?对于Nginx服务器的安全,在日常使用中也是非常重要的,这里给大家分享一点实践经验:如何构建高效安全的Nginx Web服务器最后给大家分享2个基于HTTPS优化案例:基于 Nginx 的 HTTPS 性能优化实践高性能 Nginx HTTPS 调优!为 HTTPS 提速 30%Nginx 日志相关介绍完了安装、配置、优化这些常用的场景之后,日志这块也是非常重要的,大家都知道日常排错,日志起着举足轻重的作用。Nginx日志主要分为两种:access_log(访问日志)和error_log(错误日志)。通过访问日志我们可以得到用户的IP地址、浏览器的信息,请求的处理时间等信息。错误日志记录了访问出错的信息,可以帮助我们定位错误的原因。error_log /var/log/nginx/error.log warn; #配置错误日志的级别及存储目录 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; #配置访问日志存储目 }关于Nginx日志的配置实践看这篇:Nginx 日志配置实践!超详细由于nginx功能强大,性能突出,越来越多的web应用采用nginx作为http和反向代理的web服务器。而nginx的访问日志不管是做用户行为分析还是安全分析都是非常重要的数据源之一。如何有效便捷的采集nginx的日志进行有效的分析成为大家关注的问题。通过几个实例来介绍如何通过filebeat、logstash、rsyslog采集nginx的访问日志和错误日志,我也可以:利用ELK分析Nginx日志。Nginx版本升级这里我们来聊一聊,在企业实际生产环境中经常遇到的一个情况,如何升级Nginx到新的版本和如何回滚至旧版本。版本升级其实就是针对二进制文件的升级,过程如下:[root@nginx ~]# /usr/local/nginx-1.12.2/sbin/nginx -v nginx version: nginx/1.12.2 [root@nginx ~]# cd /usr/local/nginx-1.12.2/sbin/ [root@nginx sbin]# mv nginx nginx-1.12.2 #首先备份原来的旧版本nginx二进制文件 [root@nginx sbin]# cp /usr/local/nginx-1.14.2/sbin/nginx ./ #拷贝新版本的二进制文件到当前目录注:其实升级新版本,最重要的就是平滑升级,让前端用户无感知(也就是不中断服务,这个其实不难,生产中多台依次灰度升级)。对于升级来说,最难的不是升级,而是回滚,因为在实际生产环境回滚的机率是存在,比如:新版本由于某些未知bug导致与现有应用不兼容、或出现运行不稳定的情况等等。所以,对于我们来说,故障回滚是重点。这里给大家推荐我总结的:1分钟搞定 Nginx 版本的平滑升级与回滚Nginx 反向代理与负载均衡反向代理简介反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。反向代理是为服务端服务的,反向代理可以帮助服务器接收来自客户端的请求,帮助服务器做请求转发,负载均衡等。反向代理对服务端是透明的,对我们是非透明的,即我们并不知道自己访问的是代理服务器,而服务器知道反向代理在为他服务。配置实例http { upstream product_server{ 127.0.0.1:8081; } upstream admin_server{ 127.0.0.1:8082; } upstream test_server{ 127.0.0.1:8083; } server { #默认指向product的server location / { proxy_pass http://product_server; } location /product/{ proxy_pass http://product_server; } location /admin/ { proxy_pass http://admin_server; } location /test/ { proxy_pass http://test_server; } } }如果你对Nginx 配置中location 的规则不太熟悉,推荐你看看这篇文章:Nginx 实践:location 路径匹配。nginx 每个location都是一个匹配目录,nginx的策略是:访问请求来时,会对访问地址进行解析,从上到下逐个匹配,匹配上就执行对应location大括号中的策略,并根据策略对请求作出相应。所以,有时候就因为在配置时,少些了一个字符“/”,就造成访问不通报错,这种问题是非常觉的故障原因之一,正所谓:Nginx配置中一个不起眼字符"/"的巨大作用,失之毫厘谬以千里,这篇文章详细进了相关的说明与举例验证。反向代理的优势:隐藏真实服务器;负载均衡便于横向扩充后端动态服务;动静分离,提升系统健壮性;Nginx 负载均衡nginx能实现负载均衡,什么是负载均衡呢?就是说应用部署在不同的服务器上,但是通过统一的域名进入,nginx则对请求进行分发,将请求分发到不同的服务器上去处理,这样就可以有效的减轻了单台服务器的压力。配置实例upstream server_pools { server 192.168.1.11:8880 weight=5; server 192.168.1.12:9990 weight=1; server 192.168.1.13:8989 weight=6; #weigth参数表示权值,权值越高被分配到的几率越大 } server { listen 80; server_name mingongge.com; location / { proxy_pass http://server_pools; } }Nginx 实现负载均衡的策略轮询策略:默认情况下采用的策略,将所有客户端请求轮询分配给服务端。这种策略是可以正常工作的,但是如果其中某一台服务器压力太大,出现延迟,会影响所有分配在这台服务器下的用户。最小连接数策略:将请求优先分配给压力较小的服务器,它可以平衡每个队列的长度,并避免向压力大的服务器添加更多的请求。最快响应时间策略:优先分配给响应时间最短的服务器。客户端 ip 绑定策略:来自同一个 ip 的请求永远只分配一台服务器,有效解决了动态网页存在的 session 共享问题。想要高可用?搞定负载均衡架构是关键,关于负载均衡和反向代理的区别可以参考:一文详解负载均衡和反向代理的真实区别,关于 nginx 反向代理和负载均衡策略 实战案例。Nginx 动静分离Nginx动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。推荐:CentOS 7.3:LAMP 动静分离部署可以了解一下Apache的配置,然后再回过头理解Nginx的动静分离可更直观。server { listen 80; server_name mingongge.com; location /static { root /wwww/web/web_static_site; } }也可以使用下面的方法location /image { alias /web/nginx/static/image/; }注意:使用alias末尾一定要添加/,并且它只能位于location中使用前后端分离后,可以很大程度提升静态资源的访问速度,即使动态服务不可用,静态资源的访问也不会受到影响。小试牛刀!Nginx 搭建静态资源服务器,这篇文章是给大家介绍整个搭建过程,非常详细。Nginx 高级功能除了负载均衡,Nginx还可以做很多,限流、缓存、黑白名单等重定向配置location / { return 404; #直接返回状态码 } location / { return 404 "pages not found"; #返回状态码 + 一段文本 } location / { return 302 /blog ; #返回状态码 + 重定向地址 } location / { return https://www.mingongge.com ; #返回重定向地址 }示例如下server { listen 80; server_name www.mingongge.com;return 301 http://mingongge.com$request_uri; } server { listen 80; server_name www.mingongge.com; location /cn-url { return 301 http://mingongge.com.cn; } } server{ listen 80; server_name mingongge.com; # 要在本地hosts文件进行配置 root html; location /search { rewrite ^/(.*) https://www.mingongge.com redirect; } location /images { rewrite /images/(.*) /pics/$1; } location /pics { rewrite /pics/(.*) /photos/$1; } location /photos { } }流量拷贝需求:将生产环境的流量拷贝到预上线环境或测试环境,这样做有很多好处,比如:可以验证功能是否正常,以及服务的性能;用真实有效的流量请求去验证,又不用造数据,不影响线上正常访问;这跟灰度发布还不太一样,镜像流量不会影响真实流量;可以用来排查线上问题;重构,假如服务做了重构,这也是一种测试方式;为了实现流量拷贝,Nginx提供了ngx_http_mirror_module模块,这就是 Nginx 又一牛X的功能!流量拷贝限流Nginx按请求速率限速模块使用的是漏桶算法,即能够强行保证请求的实时处理速度不会超过设置的阈值。Nginx官方版本限制IP的连接和并发分别有两个模块:limit_req_zone 用来限制单位时间内的请求数,即速率限制,采用的漏桶算法 "leaky bucket"。limit_req_conn 用来限制同一时间连接数,即并发限制。葵花宝典!一文搞定 Nginx 限流配置缓存Nginx 缓存作为性能优化的一个重要手段,可以极大减轻后端服务器的负载。下面我们将介绍 Nginx 缓存配置的相关指令以及 http 缓存机制,以及 Nginx 缓存实践案例分析。可参考:Nginx 缓存机制详解!灰度发布执行过程:当用户请求到达前端代理服务Nginx,内嵌的lua模块解析Nginx配置文件中的lua脚本代码;Lua变量获得客户端IP地址,去查询memcached缓存内是否有该键值,如果有返回值执行@client_test,否则执行@client。Location @client_test把请求转发给部署了new版代码的服务器,location @client把请求转发给部署了normal版代码的服务器,服务器返回结果。整个过程完成。下面是安装配置过程详细过程:基于 Nginx+lua+Memcache 实现灰度发布这里还给大家推荐一篇文章:基于 Nginx 实现灰度发布与 AB 测试封杀恶意访问看了 nginx 的访问日志,发现每天有好多国外的 IP 地址来访问我的网站,并且访问的内容基本上都是恶意的。因此我决定禁止国外 IP 来访问我的网站想要实现这个功能有很多方法,下面我就来介绍基于 NGINX 的 ngx_http_geoip2 模块 来禁止国外 IP 访问网站。详细的解决方案配置如:通过 Nginx 来实现封杀恶意访问Nginx+keepalived 实现高可用Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP (Virtual Router Redundancy Protocol ,虚拟路由器冗余协议)功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。keepalived高可用集群服务安装及配置过程请参考:Nginx+keepalived 实现高可用,防盗链及动静分离配置,写得太好了!Nginx 终极指南介绍用来提高Nginx服务器的安全性,稳定性和性能的12种操作。保持Nginx的及时升级去掉不用的Nginx模块禁用server_tokens项禁止非法的HTTP User Agents禁掉不需要的 HTTP 方法设置缓冲区容量上限限制最大连接数设置日志监控阻止图片外链禁止 SSL 并且只打开 TLS证书加密(HTTPS)重定向HTTP请求到HTTPS以上12个具体的配置过程可参考:提高Nginx服务器硬度的12个技巧Nginx 监控监控Web服务器对于查看网站上发生的情况至关重要。关注最多的便是日志变动,查看实时日志文件变动大家第一反应应该是'tail -f /path/to/log'命令吧,但是如果每个网站的访问日志都是使用这种方式查看也是相当崩溃的,今天小编就跟大家分享一个强大的Nginx日志监控工具。一个小工具帮你搞定实时监控Nginx服务器日常生产环境搭建了Nginx集群后,就需要继续深入研究的就是日常Nginx监控。Nginx如何监控?相信百度就可以找到:nginx-status通过Nginx-status,实时获取到Nginx监控数据后,如何和现有监控系统集成?一个很好的解决方案:Nginx+Telegraf+Influxdb+Grafana即通过Telegraf监控插件定时收集Nginx的监控状态,存储到时序数据库Influxdb中,然后通过Grafana展现即可。这是我发现的又一款管理神器,可以实现配置管理,和性能监控。具体的安装与配置过程,在这篇文章:又一款 Nginx 管理可视化神器!配置、监控一条龙 中介绍过了。
2023年08月30日
42 阅读
0 评论
0 点赞
1
2
3