nginx2

mkdir /usr/local/develop

cd /usr/local/develop

下载

wget http://nginx.org/download/nginx-1.17.4.tar.gz

yum install git

git clone https://github.com/arut/nginx-rtmp-module.git

解压文件

tar zxmf nginx-1.17.4.tar.gz

进入解压目录

cd nginx-1.17.4/

安装编译工具及依赖库 都安装成功后再次执行会有下面提示

yum -y install gcc pcre-devel zlib-devel openssl-devel libxml2-devel libxslt-devel gd-devel GeoIP-devel jemalloc-devel libatomic_ops-devel perl-devel perl-ExtUtils-Embed

编译所有功能模块  可能根据操作系统不同需要指定在./configure --prefix=/usr/local/nginx 加上后面的模块 来指定  我这里不需要

./configure --add-module=/usr/local/develop/nginx-rtmp-module --with-threads --with-file-aio --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_auth_request_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-stream=dynamic --with-stream_ssl_module --with-stream_realip_module --with-stream_geoip_module=dynamic --with-stream_ssl_preread_module --with-compat --with-pcre-jit

用上面的  下面的我做个记录

./configure --with-threads \
            --with-file-aio \
            --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_auth_request_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-stream=dynamic \
            --with-stream_ssl_module \
            --with-stream_realip_module \
            --with-stream_geoip_module=dynamic \
            --with-stream_ssl_preread_module \
            --with-compat \
            --with-pcre-jit

make && make install     如果出现下面这种情况说明上面编译没有成功

编译后默认安装目录为    /usr/local/nginx

cd /usr/local/nginx

ll

进入sbin目录

cd sbin/

nginx的常用命令

在 /usr/local/nginx/sbin目录下

./nginx   启动nginx

./nginx -s stop   关闭nginx

./nginx -s quit  优雅关闭

./nginx -s reload  在启动情况下重启nginx 默认加载的是/usr/local/nginx/conf/nginx.conf配置文件

./nginx -s reload -c /path/to/your/nginx.conf  后面可以指定你配置文件位置

./nginx -s reopen  重新打开日志文件

这样每次都需要在/usr/local/nginx/sbin目录下进行操做,比较麻烦

配置Nginx全局环境变量  

vim /etc/profile.d/nginx.sh(用这个)    和vim /etc/profile

说明:vim /etc/profile.d/nginx.sh 配置PATH=$PATH:/usr/local/nginx/sbin 和vim /etc/profile里配置PATH=$PATH:/usr/local/nginx/sbin 效果是一样的,只不过在/etc/profile.d更加有组织性

PATH=$PATH:/usr/local/nginx/sbin
 

:wq是保存退出

:q是退出不保存

:q!是强制退出不保存

配置完成后 更新环境变量

source /etc/profile

这样你就可以在任何目录执行nginx的命令

nginx   启动nginx

nginx -s stop   关闭nginx

nginx -s quit  优雅关闭

nginx -s reload  在启动情况下重启nginx 默认加载的是/usr/local/nginx/conf/nginx.conf配置文件

nginx -s reload -c /path/to/your/nginx.conf  后面可以指定你配置文件位置

nginx -s reopen  重新打开日志文件

nginx -t 检查配置文件

nginx -V  大写v看安装的模块

nginx -v 小写v看版本

把Nginx注册为系统服务

vim /etc/systemd/system/nginx.service(这里不要选这个  可以查下两者区别)

vim /usr/lib/systemd/system/nginx.service

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -q
ExecStart=/usr/local/nginx/sbin/nginx -g "pid /run/nginx.pid;"
ExecReload=/usr/local/nginx/sbin/nginx -t -q
ExecReload=/usr/local/nginx/sbin/nginx -s reload -g "pid /run/nginx.pid;"

ExecStop=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true

[Install]
WantedBy=multi-user.target
 

重新加载系统服务

system daemon-reload(我这里  这一步不需要执行)

系统启动后自动启动(注意不要多空格)

systemctl enable nginx  

启动Nginx

systemctl start nginx

重启

systemctl reload nginx

停止

systemctl stop nginx

查看状态

systemctl status nginx

安全组开通80端口

现在你可以通过

http://你的公网IP访问nginx  因为此时nginx的配置文件只配了80端口

基本认证模块(如果需要使用的话,一般不需要安装)

htpasswd -c /usr/local/nginx/htpasswd 你的登录名

安装依赖

yum -y install httpd-tools

再次执行

htpasswd -c /usr/local/nginx/htpasswd 你的登录名  需要确认密码

再次登录时要求你输入用户名密码

文件下载服务器配置

root指令和proxy_pass指令不要写在同一个块中,写了只会执行一个,谁在前执行谁


#user  nobody;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;# 工作进程:根据需要进行设置,一般设置为CPU核心数的2倍或直接设置为auto由程序自动调整
worker_processes 1;
events {# 每个工作进程的连接数,默认为1024个worker_connections 1024;
}
http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;gzip on;server {listen 80;server_name localhost;charset utf-8;root /data/nginx-web/files; # 文件存放目录location / {autoindex on; # 启用自动首页功能autoindex_format html; # 首页格式为HTMLautoindex_exact_size on; # 文件大小自动换算autoindex_localtime on; # 按照服务器时间显示文件时间default_type application/octet-stream;# 将当前目录中所有文件的默认MIME类型设置为# application/octet-streamif ($request_filename ~* ^.*?\.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx)$) {# 当文件格式为上述格式时,将头字段属性Content-Disposition的值设置为"attachment"add_header Content-Disposition: 'attachment;';
#注意加上下面的,不知什么原因 会导致失效问题(就是变成在线浏览或者在线播放了)add_header Content-Type 'application/octet-stream';}sendfile on; # 开启零复制文件传输功能sendfile_max_chunk 1m; # 每个sendfile调用的最大传输量为1MBtcp_nopush on; # 启用最小传输限制功能aio on; # 启用异步传输directio 5m; # 当文件大于5MB时以直接读取磁盘的方式读取文件directio_alignment 4096; # 与磁盘的文件系统对齐output_buffers 4 32k; # 文件输出的缓冲区大小为128KBlimit_rate 1m; # 限制下载速度为1MBlimit_rate_after 2m; # 当客户端下载速度达到2MB时进入限速模式max_ranges 4096; # 客户端执行范围读取的最大值是4096Bsend_timeout 20s; # 客户端引发传输超时时间为20spostpone_output 2048; # 当缓冲区的数据达到2048B时再向客户端发送chunked_transfer_encoding on; # 启用分块传输标识#加了好像也没效果#expires 365d;  # 设置过期时间为365天#add_header Cache-Control "public, max-age=31536000";  # 设置缓存控制为公共缓存,最大缓存时间为一年}}
}

注意:一个IP可以绑定多个域名

如果有多个server监听同一个端口 当用IP访问时候  server_name首先匹配server_name 是对应IP的那个server 如果没有server_name是那个IP  那么哪个server在前就匹配哪个server 当用域名访问时候 哪个server_name和域名相同就用哪个 这里和用localhost或者127.0.0.1无关  只会和请求的host匹配 匹配不到哪个server在前就用哪个

有点绕    在多个域名绑定同一个IP时候

就是说nginx首先会用server_name和请求的host做匹配 匹配上了 就用哪个server

匹配不上的话,哪个server在前就用哪个  和写localhost  127.0.0.1  没半毛钱关系  除非你在本地测试时候,写了localhost或者127.0.0.1 此时也是因为和请求的host匹配

伪装流媒体配置示例

重新编译下

cd /usr/local/develop/nginx-1.17.4  主要是这个--with-http_xslt_module

./configure --add-module=/usr/local/develop/nginx-rtmp-module --with-threads --with-file-aio --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --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_auth_request_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-stream=dynamic --with-stream_ssl_module --with-stream_realip_module --with-stream_geoip_module=dynamic --with-stream_ssl_preread_module --with-compat --with-pcre-jit

make && make install

下面是当1个IP地址有多个域名的情况下 SSL部署文件下载服务器示例

如果你希望把对应IP也写上可以在对应的一个域名上的80和443加上对应IP 不然Nginx不知道你具体要访问的是哪个

#user  nobody;
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {worker_connections  1024;
}
http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen 80;#填写证书绑定的域名server_name www.example.com example.com;#将所有HTTP请求通过rewrite指令重定向到HTTPS。rewrite ^(.*)$ https://$host$1;location / {index index.html index.htm;}}server {#HTTPS的默认访问端口443。#如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。listen 443 ssl;#填写证书绑定的域名server_name www.example.com example.com;#填写证书文件绝对路径ssl_certificate /usr/local/nginx/cert/www.example.com.pem;#填写证书私钥文件绝对路径ssl_certificate_key /usr/local/nginx/cert/www.example.com.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;#自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)#TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;#表示优先使用服务端加密套件。默认开启ssl_prefer_server_ciphers on;root /data/nginx-web/files2; # 文件存放目录	## 白名单设置,只允许下面的ip的客户端以及本地能访问。##allow 123.123.123.1;##deny all;#location是匹配IP+端口或者是域名后面的location / {autoindex on; # 启用自动首页功能autoindex_format html; # 首页格式为HTMLautoindex_exact_size on; # 文件大小自动换算autoindex_localtime on; # 按照服务器时间显示文件时间default_type application/octet-stream;# 将当前目录中所有文件的默认MIME类型设置为# application/octet-streamif ($request_filename ~* ^.*?\.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx)$) {# 当文件格式为上述格式时,将头字段属性Content-Disposition的值设置为"attachment"add_header Content-Disposition: 'attachment;';
#注意加上下面的,不知什么原因 会导致失效问题(就是变成在线浏览或者在线播放了)add_header Content-Type 'application/octet-stream';}sendfile on; # 开启零复制文件传输功能sendfile_max_chunk 1m; # 每个sendfile调用的最大传输量为1MBtcp_nopush on; # 启用最小传输限制功能aio on; # 启用异步传输directio 5m; # 当文件大于5MB时以直接读取磁盘的方式读取文件directio_alignment 4096; # 与磁盘的文件系统对齐output_buffers 4 32k; # 文件输出的缓冲区大小为128KBlimit_rate 1m; # 限制下载速度为1MBlimit_rate_after 2m; # 当客户端下载速度达到2MB时进入限速模式max_ranges 4096; # 客户端执行范围读取的最大值是4096Bsend_timeout 20s; # 客户端引发传输超时时间为20spostpone_output 2048; # 当缓冲区的数据达到2048B时再向客户端发送chunked_transfer_encoding on; # 启用分块传输标识}}server {listen 80;#填写证书绑定的域名server_name www.example2.com example2.com;#将所有HTTP请求通过rewrite指令重定向到HTTPS。rewrite ^(.*)$ https://$host$1;location / {index index.html index.htm;}	}server {#HTTPS的默认访问端口443。#如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。listen 443 ssl;#填写证书绑定的域名server_name www.example2.com example2.com;#填写证书文件绝对路径ssl_certificate /usr/local/nginx/cert/www.example2.com.pem;#填写证书私钥文件绝对路径ssl_certificate_key /usr/local/nginx/cert/www.example2.com.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;#自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)#TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;#表示优先使用服务端加密套件。默认开启ssl_prefer_server_ciphers on;root /data/nginx-web/files; # 文件存放目录		## 白名单设置,只允许下面的ip的客户端以及本地能访问。##allow 123.123.123.1;##deny all;location / {autoindex on; # 启用自动首页功能autoindex_format html; # 首页格式为HTMLautoindex_exact_size on; # 文件大小自动换算autoindex_localtime on; # 按照服务器时间显示文件时间default_type application/octet-stream;# 将当前目录中所有文件的默认MIME类型设置为# application/octet-streamif ($request_filename ~* ^.*?\.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx)$) {# 当文件格式为上述格式时,将头字段属性Content-Disposition的值设置为"attachment"add_header Content-Disposition: 'attachment;';
#注意加上下面的,不知什么原因 会导致失效问题(就是txt变成在线浏览)add_header Content-Type 'application/octet-stream';}sendfile on; # 开启零复制文件传输功能sendfile_max_chunk 1m; # 每个sendfile调用的最大传输量为1MBtcp_nopush on; # 启用最小传输限制功能aio on; # 启用异步传输directio 5m; # 当文件大于5MB时以直接读取磁盘的方式读取文件directio_alignment 4096; # 与磁盘的文件系统对齐output_buffers 4 32k; # 文件输出的缓冲区大小为128KBlimit_rate 1m; # 限制下载速度为1MBlimit_rate_after 2m; # 当客户端下载速度达到2MB时进入限速模式max_ranges 4096; # 客户端执行范围读取的最大值是4096Bsend_timeout 20s; # 客户端引发传输超时时间为20spostpone_output 2048; # 当缓冲区的数据达到2048B时再向客户端发送chunked_transfer_encoding on; # 启用分块传输标识}}
}

输入域名访问: 浏览器首先会检查本地缓存,看是否有对应域名的解析记录。 如果本地缓存没有,浏览器会查找操作系统的 hosts 文件,看是否有对应的 IP 地址。 如果 hosts 文件中没有,浏览器会向 DNS 服务器发起域名解析请求,获取对应的 IP 地址。 输入 IP 访问: 浏览器会直接使用输入的 IP 地址进行访问,不再进行 DNS 解析。此时不会再向 DNS 服务器发起域名解析请求。 总体来说,如果你直接输入 IP 地址访问,浏览器会跳过 DNS 解析的步骤,直接使用输入的 IP 地址

hosts文件地址:C:\Windows\System32\drivers\etc  目录下

负载均衡:

package com.example.demo16.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** @author hrui* @date 2024/2/9 19:17*/
@RestController
public class TestController {@Value("${server.port}")private String port;@RequestMapping("/test1")public Object test(String name,String age){return "端口"+port+","+"name="+name+","+"age="+age;}}

端口一个设置为8081,一个设置为8082,一个设置为8083

需要JDK环境

启动命令:分别启动3个jar包

 nohup java -jar backend8081.jar > backend8081.log 2>&1 &

 nohup java -jar backend8082.jar > backend8082.log 2>&1 &

 nohup java -jar backend8083.jar > backend8083.log 2>&1 &

server {listen 80;#填写证书绑定的域名server_name www.example.com example.com;#将所有HTTP请求通过rewrite指令重定向到HTTPS。rewrite ^(.*)$ https://$host$1;   location / {index index.html index.htm;}	}server {#HTTPS的默认访问端口443。#如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。listen 443 ssl;#填写证书绑定的域名server_name www.example.com example.com;#填写证书文件绝对路径ssl_certificate /usr/local/nginx/cert/www.example.com.pem;#填写证书私钥文件绝对路径ssl_certificate_key /usr/local/nginx/cert/www.example.com.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;#自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)#TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;#表示优先使用服务端加密套件。默认开启ssl_prefer_server_ciphers on;## 白名单设置,只允许下面的ip的客户端以及本地能访问。##allow 123.123.123.1;##deny all;location / {proxy_pass http://backend;}}upstream backend{server 127.0.0.1:8081;server 127.0.0.1:8082;server 127.0.0.1:8083;}

每次访问它都会切换不通端口

此种方式叫轮询策略

IP哈希策略

它会根据你你客户端IP计算得出该访问那台服务器,如果IP不换,就会一致访问同一个端口(服务器)

最少连接策略 

随机负载策略

权重负载策略  简单说就是81->1次   82->2次  83->3次  此种方式在服务器性能有差距时使用合适

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/466345.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ocr之TesseractOcr的安装及使用

目录 一、安装环境 二、安装内容 三、安装过程及识别测试 1. 安装过程 2. 程序编写 总结 1. 安装复杂度较低 2. 国外开源Ocr 3. 可设置识别参数 4. 工具类 一、 系统环境windows 10 linux环境也可安装, 可借鉴此篇文章>> | 二、安装内容 Tesseract exe 程序安…

锐捷(二十一)全局地址绑定

vlan划分和vlanif接口配置略,注意vlanif接口里要no shutdown配置如下: Address-bind 192.168.1.1 AAAA.BBBB.CCCCAddress-bind uplink g0/0Address-bind binding-filter loggingAddress-bind install 此时,IP为192.168.1.1 mac地址为AAAA.B…

2022年9月电子学会青少年软件编程 中小学生Python编程等级考试二级真题解析(选择题)

2022年9月Python编程等级考试二级真题解析 选择题(共25题,每题2分,共50分) 1、运行以下代码,结果输出的是 means[Thank,You] print(len(means)) A、1 B、2 C、6 D、8 答案:B 考点分析:考…

前端JavaScript篇之对象继承的方式有哪些?

目录 对象继承的方式有哪些?1. 原型链继承2. 借用构造函数3. 组合继承4. 原型式继承5. 寄生式组合继承 对象继承的方式有哪些? 1. 原型链继承 当使用原型链继承时,子类型的原型对象被设置为父类型的一个实例。这意味着子类型通过其原型可以…

【知识整理】技术新人的培养计划

一、培养计划落地实操 1. 概要 新人入职,要给予适当的指导,目标: 1、熟悉当前环境: 生活环境:吃饭、交通、住宿、娱乐 工作环境:使用的工具,Mac、maven、git、idea 等 2、熟悉并掌握工作技…

苹果Mac键盘如何将 F1 到 F12 取消按Fn

苹果电脑安装了Win10操作系统之后,F1到F12用不了怎么办的解决方法。本文将介绍一些解决方法,帮助您解决无法使用F1到F12功能键的问题。 使用 Mac系统的人都知道,Mac系统默认是没有开启 F1-F12 的使用的,平时我们使用的系统都可以使…

C++三剑客之std::optional(一) : 使用详解

相关文章系列 C三剑客之std::optional(一) : 使用详解 C三剑客之std::any(一) : 使用 C之std::tuple(一) : 使用精讲(全) C三剑客之std::variant(一) : 使用 C三剑客之std::variant(二):深入剖析 目录 1.概述 2.构建方式 2.1.默认构造 2.2.移动构造 2.3.拷贝构…

中科大计网学习记录笔记(八):FTP | EMail

前言: 学习视频:中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程 该视频是B站非常著名的计网学习视频,但相信很多朋友和我一样在听完前面的部分发现信…

js改善轮播图(transform)时内部文本上下闪动问题

前些天绘制轮播图时,发现轮播图中不同span标签内(样式不同)文字上下跳动。 为了防止眩晕在岗位上,需要对其进行改善,试了很多种方法,最后来总结一下: 我的轮播图template代码片段: …

分享88个鼠标特效,总有一款适合您

分享88个鼠标特效,总有一款适合您 88个鼠标特效下载链接:https://pan.baidu.com/s/1ljcxwgXGpw7baiufUGJjZA?pwd8888 提取码:8888 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,收集整理更不…

STM32 TIM输入捕获

单片机学习! 目录 文章目录 前言 一、输入捕获 1.1 输入捕获简介 1.2 输出比较和输入捕获执行逻辑的对比: 1.2.1 输出比较 1.2.2 输入捕获 1.2.3 输出比较和输入捕获对比总结 1.3 输入捕获作用 1.4 三种定时器的输入捕获通道分布 1.5输入捕获的PWMI模式和…

Vue3快速上手(二)VSCode官方推荐插件安装及配置

一、VSCode官方插件安装,如下图2款插件 在用vite创建的程序里,提示提安装推荐的插件了,如下图: 二、配置 在设置-扩展里找到Volar插件,将Dot Value勾选上。这样在ref()修改变量时,会自动填充.value,无需…