首页
公共接口
每周Music
友链
Armour
微软太空望远镜
国际空间站实时位置
Search
1
RB2011升级固件,RB2011刷机
58 阅读
2
关于新栏目接口的说明
56 阅读
3
RouterOS配置OpenVPN客户端以及服务端
52 阅读
4
自己封装ESXI的驱动
46 阅读
5
CentOS同步时间
42 阅读
NAS
服务器
笔记记录
网络
Armour
EVE-NG
Space
Nginx
登录
Search
DKM
累计撰写
98
篇文章
累计收到
0
条评论
首页
栏目
NAS
服务器
笔记记录
网络
Armour
EVE-NG
Space
Nginx
页面
公共接口
每周Music
友链
Armour
微软太空望远镜
国际空间站实时位置
搜索到
26
篇与
Nginx
的结果
2023-06-13
Nginx不能正常反向代理目标网站
很多情况下会遇到反向代理目标网站,由于目标网站的设置,反向代理不成功,需要在配置文件中间写入以下参数设置自定义Host以及传递真实客户端IP地址到服务器Nginx的虚拟服务器功能是通过虚拟主机的Host名称区分网站与服务的,所以会将网站与虚拟Host进行绑定,通过请求的Host区分访问的是哪个网站,当反向代理的站点不设置自定义Host,那么这个Nginx服务器反向代理的时候是传递的客户端请求反向代理服务器的Host到被反向代理的网站;又因为被反向代理的服务器没有这个主机名,所以会造成网站无法正常访问;因此需要在Nginx内设置一个自定义Host,在访问到这个反向代理的Nginx虚拟服务器时,会把传递到被代理网站的Host名称改为自定义的Host名称,从而实现不同虚拟主机名访问同一个网站Nginx还有一个重要的参数就是请求IP地址,当服务器不传递客户端真实IP地址时,那么所有的客户端请求反向代理的服务器时,对于被代理网站来讲,所有客户端请求的IP地址都为反向代理服务器的IP地址,不为客户端IP地址;假设服务器设置单IP地址访问数量限制时,反向代理服务器在高并发访问的情况下被代理网站服务器限制访问,或者禁用访问权限,导致反向代理服务器无法正常访问。配置文件写法 server { listen 80; server_name virtual_machine_name; location / { proxy_pass proxy_web_pass; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host proxy_virtual_name; } }
2023年06月13日
17 阅读
0 评论
0 点赞
2023-01-11
终章-使用Nginx搭建一个CDN服务
本文为本系列最后一篇文章,本文章重点讲Nginx一个最重要的功能,即CDN服务器功能;目前国际大厂,Amazon,Azure,CloudFlare,Akamain以及国内的大部分CDN服务商均使用将Nginx变成CDN服务之前,首先配置缓存目录,缓存位置最好放在速度比较快的硬盘里面,建议放速度快的硬盘,因为缓存是频繁调用的。配置缓存目录 #创建目录 mkdir -p /data/nginx-cdn-cache mkdir -p /data/nginx-cache #配置文件目录权限 chmod 777 /data/nginx-cdn-cache chmod 777 /data/nginx-cache #配置Nginx配置文件 nano /etc/nginx/nginx.conf #在配置文件内引入参数 http{ proxy_temp_path /data/nginx-cache; proxy_cache_path /data/nginx-cdn-cache levels=1:2 keys_zone=cache_one:50m inactive=1d max_size=1g; proxy_connect_timeout 5; proxy_read_timeout 60; proxy_send_timeout 5; proxy_buffer_size 16k; proxy_buffers 4 64k; proxy_busy_buffers_size 128k; proxy_temp_file_write_size 128k; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_404; } #注意这个是引入到http块里面的,不要填错地方 #一开始的目录是必须要创建的,不创建无法正常正常使用下面写用于清除缓存的脚本,也可以用用C代码写一个服务,C代码我就不讲了,这里我就用bash脚本 nano /etc/nginx/clean-cdn-cache.sh chmod a+x clean-cdn-cache.sh #/bin/bash cd /data sudo rm -rf nginx-cache/* && sudo rm -rf nginx-cdn-cache/* cd 上面的脚本可以清除文件下面将脚本封装成命令 cp clean-cdn-cache.sh /usr/bin/nginx-clean sudo chmod 755 /usr/bin/nginx-clean #修改完了之后使用nginx-clean即可执行清除CDN缓存下面开始编写Nginx的网站配置文件 #upstream参数,因为是CDN服务器,这个upstream是标记源服务器的参数块,一般直接填写服务器IP地址 upstream cdn_web_1 { server 172.16.21.37:80; } #server参数,用于缓存参数 server { listen 80; server_name www.nginx.test; #缓存静态文件 location ~ .*\.(gif|jpg|png|html|htm|css|js|ico|swf|pdf|jpeg|mp4)$ { proxy_redirect off; proxy_next_upstream http_502 http_504 http_404 error timeout invalid_header; proxy_set_header Host $host; proxy_set_header X-real-ip $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #配置源站参数 proxy_pass http://cdn_web_1; proxy_cache cache_one; #传回请求参数 proxy_cache_key "$host$request_uri"; add_header Cache "$upstream_cache_status"; #HTTP返回错误状态 proxy_cache_valid 200 304 301 302 8h; proxy_cache_valid 404 1m; #缓存在CDN有效时间,可以自定义,常见CDN运营商使用的为5小时左右 proxy_cache_valid any 1d; } location / { proxy_redirect off; #设置超时错误 proxy_next_upstream http_502 http_504 http_404 error timeout invalid_header; proxy_set_header Host $host; proxy_set_header X-real-ip $remote_addr; #向服务端返回客户端IP地址 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #配置源站参数 proxy_pass http://cdn_web_1; client_max_body_size 40m; client_body_buffer_size 128k; #连接超时时间 proxy_connect_timeout 60; #发送超时时间 proxy_send_timeout 60; #读取超时时间 proxy_read_timeout 60; proxy_buffer_size 64k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; } }
2023年01月11日
8 阅读
0 评论
0 点赞
2023-01-09
为什么要用Nginx
学到现在,很多人都会问的一个问题,为什么要用Nginx,为什么不去用其他例如Caddy,Tomcat,Apache等HTTP服务器呢?其实吧,这是个好问题,如果用上面的观点去看Nginx的话,Nginx就只有HTTP服务器的功能,而且非常容易被Tomcat,Apache等HTTP服务器替代,另外Tomcat还是一款自带运行环境的架构。解释上面提出的问题,需要如下几点来回答第一点,服务器的应用Nginx是一个使用C语言开发的高性能HTTP服务器,反向代理服务器,TCP/UDP端口转发服务器;官方测试过Nginx能持续提供5万多并发连接,消耗的CPU,内存资源很少,并且运行可靠性很高。在作为HTTP服务器时,Nginx可以做静态网页服务器或者搭配FastCGI(例如PHP,Python,Go)做动态交互式网页;并做前端网页文件和后端服务文件的分离操作、目录绑定、目录加密、甚至是将Nginx服务器作为文件服务器(WebDav)。在很多时候,一台服务器可能需要部署多个网站,在使用的时候需要对网站进行隔离,常用的方法是通过使用不通端口访问不同的网站,那就会出现一种问题,除了80端口浏览器打开可以直接访问,其他的端口需要在访问的域名或者IP地址后面加上:[port]的形式访问网站,而对于Nginx来说可以不需要这种操作,Nginx可以在server参数中间指定server_name参数创建一个网站空间,再指定网站的目录位置,在访问网站的时候会带上请求的域名参数,到Nginx服务器上会比较域名参数,通过检索Nginx的配置文件参数内是否包含该域名,如果存在该域名则默认请求绑定该域名的网站,不存在则返回默认页面。在使用Nginx的时候会遇到不知名的攻击者针对服务器的攻击,一般情况下网站会使用CDN来保护源网站,并通过CDN加速网站的打开速度,如果没有正确配置Nginx的配置文件,那么会出现源站地址泄露或者攻击者访问到源站服务器,并针对源站服务器进行攻击,在配置Nginx的时候需要配置一个默认页,在直接通过IP访问网站的时候返回403或者直接返回502。Nginx最主要也是最重要的功能就是反向代理,负载均衡;当某个公司的业务量增大,那么该公司的网站服务器就会出现大量的访问,如果服务器数量较少,则可能会出现访问该公司网站速度过慢,或者该公司网站打不开甚至是服务器崩溃;在这种情况下会使用到Nginx的负载集群方式来增加网站的负载能力,和网站的响应速度,所有请求网站用户的连接数会被Nginx平均负载,在某台服务器掉线的情况下不影响公司网站的正常运营,将故障服务器从集群中间去除,或者标记down。Nginx反向代理是通过反向访问其他的网页,但是有人会有疑问了,都反向代理其他的网站服务器了,为什么不直接使用其他的网站服务器,偏要去使用反向代理服务器呢?这个原因很简单,假设一个网站使用到了Python编写的动态语句,那么直接使用这个服务器上的Python引擎会出现一种情况,就是网站一般分静态资源和动态指令,如果直接让引擎接管全部操作的话,可能会出现源服务器需要实时回应静态资源或者是实时生成静态资源,会造成引擎产生大量的不必要连接数和不必要的性能浪费,那么就可以使用Nginx的反向代理缓存,缓存网站的静态资源,在用户访问网站的时候Nginx会直接缓存保存在缓存目录的静态资源文件,在用户进行动态操作的时候(例如查询信息)再将动态操作反馈到Python编写的服务器引擎,如果遇到没有缓存过的静态资源文件则再次向源Python请求保存的缓存文件,并缓存到Nginx的缓存目录;使用这种方法从而降低源服务器的性能浪费以及源服务器的资源消耗,并且Nginx支持极高的并发连接数,配合Nginx的负载集群(upstram)可以实现服务的高可用。第二点,其他类型HTTP服务器的优缺点Apache优点: 几乎可以运行在所有的通用计算机上,使用的是静态解析文件的方法,可以通过扩展脚本的方式支持动态页面 缺点: 配置复杂,服务以进程结构为基础,消耗系统硬件资源比较高,所以在高并发连接的时候系统需要消耗大量资源 Lighttpd优点: 比Apache轻量,服务器资源消耗较少,支持高并发 缺点: 稳定性和Apache Nginx相比较相差较远,支持的功能较少,并且代码的缺陷多 Caddy优点: 使用GoLang开发,Windows和Linux平台都可以使用,需要安装Go语言环境,自动支持HTTPS,使用简单 缺点: 由于Caddy使用的Go开发,所以Caddy的处理性能就是Go的处理性能 IIS优点: 使用简单,方便,支持多种动态语言 缺点: 无Linux平台版本,Linux平台只能用Docker版IIS,并且Linux版仅支持ASP.NET Core,标准版.NET Framework 5.0以下无法支持 第二点,支持并发量高<网上摘录部分>Nginx 服务器,正常运行过程中:多进程:一个 Master 进程、多个 Worker 进程。Master 进程:管理 Worker 进程。对外接口:接收外部的操作(信号);对内转发:根据外部的操作的不同,通过信号管理 Worker;监控:监控 Worker 进程的运行状态,Worker 进程异常终止后,自动重启 Worker 进程。Worker 进程:所有 Worker 进程都是平等的。实际处理:网络请求,由 Worker 进程处理。Worker 进程数量:在 nginx.conf 中配置,一般设置为核心数,充分利用 CPU 资源,同时,避免进程数量过多,避免进程竞争 CPU 资源,增加上下文切换的损耗。HTTP 连接建立和请求处理过程如下:Nginx 启动时,Master 进程,加载配置文件。Master 进程,初始化监听的 Socket。Master 进程,Fork 出多个 Worker 进程。Worker 进程,竞争新的连接,获胜方通过三次握手,建立 Socket 连接,并处理请求。Nginx 高性能、高并发Nginx 为什么拥有高性能并且能够支撑高并发?Nginx 采用多进程+异步非阻塞方式(IO 多路复用 Epoll)。请求的完整过程:建立连接→读取请求→解析请求→处理请求→响应请求。请求的完整过程对应到底层就是:读写 Socket 事件。Nginx 的事件处理模型Request:Nginx 中 HTTP 请求。基本的 HTTP Web Server 工作模式:接收请求:逐行读取请求行和请求头,判断段有请求体后,读取请求体。处理请求。返回响应:根据处理结果,生成相应的 HTTP 请求(响应行、响应头、响应体)。Nginx 也是这个套路,整体流程一致:Nginx 的模块根据其功能基本上可以分为以下几种类型:①event module:搭建了独立于操作系统的事件处理机制的框架,及提供了各具体事件的处理。包括 ngx_events_module,ngx_event_core_module 和 ngx_epoll_module 等。Nginx 具体使用何种事件处理模块,这依赖于具体的操作系统和编译选项。②phase handler:此类型的模块也被直接称为 handler 模块。主要负责处理客户端请求并产生待响应内容,比如 ngx_http_static_module 模块,负责客户端的静态页面请求处理并将对应的磁盘文件准备为响应内容输出。③output filter:也称为 filter 模块,主要是负责对输出的内容进行处理,可以对输出进行修改。例如,可以实现对输出的所有 html 页面增加预定义的 footbar 一类的工作,或者对输出的图片的 URL 进行替换之类的工作。④upstream:upstream 模块实现反向代理的功能,将真正的请求转发到后端服务器上,并从后端服务器上读取响应,发回客户端。upstream 模块是一种特殊的 handler,只不过响应内容不是真正由自己产生的,而是从后端服务器上读取的。⑤load-balancer:负载均衡模块,实现特定的算法,在众多的后端服务器中,选择一个服务器出来作为某个请求的转发服务器。摘录链接链接:https://www.jianshu.com/p/74aededc3457来源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。第三点,使用难度较低
2023年01月09日
8 阅读
0 评论
0 点赞
2023-01-08
Nginx配置文件参数部分详解
因为Nginx的配置文件配置参数有很多,本篇文章只能粗略的放出部分配置参数文件Nginx主配置文件详解Nginx主配置文件默认位置为/etc/nginx/nginx.conf一般情况下默认编译的位置在上面的路径内,非刻意修改位置路径不变(修改方法为编译的时候设定编译位置)主配置文件结构#全局块 worker_processes 1; #events块 events { worker_connections 1024; } #http块 http { #http全局块 upstream { #upstream块 } server { #server块(网站配置文件块) location / { #location块 } } } stream { #stream块 upstream { #upstream块 } }上面配置文件的解读全局块全局块通常配置Nginx运行用户或者用户组,Nginx的进程和PID存放位置,日志的存放位置events块一般情况下能限制多worker process接收多个网络连接,这部分一般不做设置,任何配置问题可能会影响到Nginx的服务器整体性能,一般由服务器默认设置即刻。http块http块是Nginx配置文件中间最重要的部分,整个Nginx下面的http服务都在http块下面;http块下面可以包括http全局块,用于启用插件,引用外部文件;本区域server块可以通过include引用当前目录下conf.d目录下的参数配置文件,引用的语法为 include /etc/nginx/conf.d/*.conf ,意思为引用conf.d目录下面的所有以.conf为后缀的文件;http块内不能包含stream块,stream块与http块同级。http块配置参数http{#文件扩展名与文件类型映射表 include mime.types; #默认文件类型 default_type application/octet-stream; #默认编码 charset utf-8; #此选项允许或禁止使用socke的TCP_CORK的选项,此选项仅在使用sendfile的时候使用 tcp_nopush on; tcp_nodelay on; #长连接超时时间,默认单位是秒 keepalive_timeout 120; #FastCGI相关参数配置网站性能,一般搭配fastcgi模块使用,例如PHP fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; #gzip模块设置,需要Nginx在安装的时候有编译gzip模块 gzip on; #开启gzip压缩输出 gzip_min_length 1k; #最小压缩文件大小 gzip_buffers 4 16k; #压缩缓冲区 gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0) gzip_comp_level 2; #压缩等级 gzip_types text/plain application/x-javascript text/css application/xml; #压缩类型,默认就已经包含textml,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。 gzip_vary on; #限制一个IP的连接数 limit_zone crawler $binary_remote_addr 10m; #设置上传的文件大小 client_max_body_size 8m; #允许访问目录 autoindex on; #客户请求头缓冲大小 large_client_header_buffers 4 64k;}server块server块就和虚拟主机有关系了,一般为网站的配置文件,可以用在域名隔离网站的情况下,特征是在http块下可以无限设置数量;server块下面主要用于正常的http第七层服务,内包含location块,server块基本语法如下 listen [port | ip | ip:port | localhost] #解释,上面的port可指定自定义端口,ip为监听地址,不指定端口默认监听该IP地址的80端口,ip:port为自定义监听该地址的端口,localhost一般情况下为监听127.0.0.1的80端口,可以为localhost:80的方式监听端口 server_name [ip | domain | _] #解释,上面的server_name可以表示网站空间为单个IP地址,或者多个地址,或者是多个域名;_下划线为表示该网站空间没有名称,即访问该网站不需要任何标识都可以访问。 location [ = | ~ | ~* | ^~ ] uri { ... } #解释,具体用途看前面单独讲location的文章 #允许客户端请求的最大单文件字节数 client_max_body_size 10m; #高负载下缓冲区大小 proxy_busy_buffers_size 64k; upstream块 upstream [upstream_name] #解释,upstream为网站http负载集群使用,可以包含在stream块里面做第四层负载集群使用。 #基本语法 upstream stream_name { [ip_hash | url_hash |least_conn | least_time] server [ip | domain | localhost]:port [type] } #其中type为负载参数,用于标识服务器权重,和服务器状态,基本使用方法如下 #weight 权重参数 #down 不请求该服务器 #backup 备份服务器 #max-fails 标记不可用超时次数 #fail_timeout 标记超时时间,与上方超时次数对应,超过次数后自动标记down状态 #max-conns 节点允许最大连接数当该节点达到规定数值,其他请求会被转移到其他服务器 #slow-start 节点恢复访问时,不立刻加入集群 #--------------------------------------- #解释[ip_hash | url_hash | least_conn | least_time]的使用区别 #ip_hash 用于动态网站,基于hash计算,保持session的一致 #url_hash 静态资源缓存,加速 #least_conn 优先访问当前网站访问量最小的 #least_time 优先访问最快响应速度的服务器 stream块stream块可以嵌套upstream块,stream块的主要参数listen 监听端口preread_buffer_size 设置每个会话数据预读缓冲区的大小preread_timeout 设置每个会话数据预读取的超时时间proxy_protocol_timeout 读取代理协议头的超时时间resolver 域名解析服务器地址resolver_timeout 域名解析超时时间tcp_nodelay 启用或关闭立即发送数据(tcp_nodelay)选项variables_hash_bucket_size 设置变量哈希表中桶的大小variables_hash_max_size 设置变量哈希表的最大值---------------分割---------------上面参数注意部分;listen可以监听UDP端口,监听格式 listen [port] udp;stream里面不可以使用server_name参数,server_name参数仅在第七层服务中间有效,stream为第四层协议,自然server_name参数无效upstream 在stream里面使用的时候可以使用的格式 server [domain | ip | static_host]:port [type]上格式解读,在stream里面可以使用与http块内upstream一样的权重参数,服务器标记参数以及备份参数stream块可以用来当端口转发服务使用,仅支持纯TCP/UDP的服务使用,使用到GRE协议或者更低例如 第三层协议PPTP(GRE),IGMP,IPsec,OpenVPN等,以及第二层协议L2TP(第二层链路封装协议)ikev2,ikev3,以及各种路由协议,均不能通过Nginx的TCP/UDP代理模块代理。解释:Nginx的TCP/UDP代理仅支持第四层以及第四层以上的第五层,第六层,以及第七层的协议,在OSI模型中间,规定只有层数低的协议可以代理层数高的协议或者同级的协议,TCP和UDP属于第四层,基于第三层的基础之上,所以Nginx自然不能代理第三层的协议,或者更低的协议;但是SOCKS工作在第四层,所以可以使用Nginx的第四层代理SOCKS的协议。
2023年01月08日
25 阅读
0 评论
0 点赞
2023-01-04
location 通用参数扩充资料
接上一篇文章扩充资料在使用location的时候会出现一个常见问题,就是在使用location /xxxx的时候,假设是静态目录,需要使用root或者alias两个参数alias是普通字符串匹配,假设请求一个静态文件是http://test.com/img/static/0001.png 那么这个location配置文件这样写 location /img { alias /var/www/; }使用alias指定目录那么请求携带的URL里面带/img/static/0001.png的参数,那么会请求/var/www/static/0001.png目录下面的静态文件,如果这个文件真实存在,则正常请求,如果将alias改成root参数,那么就会请求/var/www/img/static/0001.png下查询文件,如果文件不存在会返回404;alias叫别名配置,用于访问文件系统;root为根路径配置,用于URL匹配访问文件系统,然后会把请求的路径附加在后面
2023年01月04日
3 阅读
0 评论
0 点赞
2023-01-04
Nginx的location参数
location的语法规则location 主要分为几个语法类型符号类 [= ~ ~* ^~]目录类 /xxx/通用请求类 /符号类解释= 普通字符串精确匹配^~ 带参数前缀匹配,当前只匹配该参数,其他的一律不匹配~ 正则匹配,区分请求的大小写~* 正则匹配,不区分请求的大小写/x 普通前缀匹配/ 一般为通用请求,无匹配时使用,对比上面优先级最小上顺序为例,从上到下依次优先级降低TIP A:“=”, 示范 location = /A001 { return 301 https://baidu.com; }则请求的时候需要请求的URL后缀/A001 200OK/A001/ 404TIP B:“^~” 示范 location ^~ /A001/ { return 301 https://baidu.com; }如果写入该参数,则服务器仅匹配/A001/为目录参数开头的请求例如 http://test.com/A001/ 200OKhttp://test.com/A001/x 200OKhttp://test.com/A001 404如果遇到其他设置均由^~参数来处理TIP C:“~” 示范 location ~ /A001 { return 301 https://baidu.com; }请求区分大小写,则请求的参数与设置参数的大小写不一致,则返回404,如果服务器上面设置文件里面含上面的TIP B参数则下面所有参数全部中断请求例如http://test.com/A001 200OKhttp://test.com/a001 404http://test.com/A000 404TIP D:“~*” 示范1 location ~* .(png|jpg|gif)$ { }当需要请求静态文件的时候,不区分静态文件后缀的大小写例如http://test.com/1.Png 200OKhttp://test.com/1.PNG 200OKhttp://test.com/1.png 200OK示范2 location ~* /ABC { }当请求携带目录的时候,不区分目录的大小写例如http://test.com/ABC 200OKhttp://test.com/Abc 200OKhttp://test.com/abc 200OKhttp://test.com/abcd 404如果在整体参数中间出现^~,则以^~为默认请求匹配,不请求~*参数匹配TIP E:“/xxx” 示范1 location /test { }当请求不携带任何参数的时候,默认匹配携带参数例如http://test.com/test 200OKhttp://test.com/ 404示范2 location /test2 { }例如http://test.com/test2 200OKhttp://test.com/test3 404该请求匹配通用匹配中存在特定字符串的匹配TIP F:“/” 示范 location / { }此请求优先级最低,可以自定义目录请求例如http://test.com/ 200OKhttp://test.com/ABC 200OK PS:前提是该网站默认目录下存在/ABC目录,否则返回404http://test.com/i/1.png 200OK PS:前提是该网站的/i目录下存在1.png这个文件,否则返回404该请求参数为所有请求参数中间优先级最低请求综上参数TIP编号为例优先级顺序为 A>B>C>D>E>F,F为优先级最低------------------------------------分割符号------------------------------------扩展应用某网站的/admin目录(不区分大小写)不能通过域名test.com访问到,如果访问则返回403或者404错误 server { listen 80; server_name test.com; location / { root /var/www/test.com; index index.html index.htm; } location ~* /admin { return 403; }某网站test.com在访问/index目录的时候(不区分大小写)需要嵌套访问或者跳转到该网站公司的其他子网站http://test2.com/index 上嵌套访问方法,使用反向代理 server { listen 80; server_name test.com; location / { root /var/www/test.com; index index.html index.htm; } location ~* /index { proxy_pass http://test2.com/index; }重定向方法,使用301 server { listen 80; server_name test.com; location / { root/var/www/test.com; index index.html index.htm; } location ~* /index { return 301 http://test2.com/index; }某网站访问的时候只允许访问默认页面,不得用任何URL做任何自定义请求,否则返回403 server { listen 80; server_name test.com; location = / { root /var/www/test.com; index index.html index.htm; }
2023年01月04日
8 阅读
0 评论
0 点赞
2023-01-02
Nginx编译配置文件部分解释
本文讲解Nginx的编译安装配置的结构,详细解释每一行的作用以及含义 #查看当前系统安装的Nginx编译配置 nginx -V #Nginx配置反馈文件 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' #------------------分割符号---------------------------- #上面的配置文件拆解 --prefix=/usr/share/nginx :Nginx的安装目录 --sbin-path=/usr/sbin/nginx :可执行程序文件存放位置,用于确定可执行文件的位置,Service引用位置与这个位置相同 --modules-path=/usr/lib64/nginx/modules :第三方插件存放的位置(在编译的时候指定插件存放的位置,编译后无需此目录) --conf-path=/etc/nginx/nginx.conf :Nginx配置文件所在位置(也可以说是Nginx主配置文件的位置) --error-log-path=/var/log/nginx/error.log :错误日志文件保存位置 --http-log-path=/var/log/nginx/access.log :HTTP访问日志记录保存位置 --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 :字面意思是FastCGI的缓存文件存储路径 --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi :uwsgi服务器缓存文件位置 --http-scgi-temp-path=/var/lib/nginx/tmp/scgi :SCGI服务器接收到的数据文件缓存目录 --pid-path=/run/nginx.pid :指定当前的pid文件存放位置 --lock-path=/run/lock/subsys/nginx :lock文件保存的目录 --user=nginx --group=nginx :Nginx所属的用户和用户组,再编译之前需要设置相同的用户和用户组,不然编译会报错,运行环境也需要配置用户和用户组,不然在运行软件的时候也会报错 #----------------启用组件----------------------- --with-google_perftools_module :启用ngx_google组件,用于分析性能瓶颈 --with-http_addition_module :启用过滤器,分步响应请求 --with-http_auth_request_module :启用统一用户权限验证 --with-http_dav_module :Nginx官方的WebDav模块 --with-http_degradation_module :内存不足的时候会返回HTTP 204错误代码或者HTTP 444错误代码 --with-http_flv_module :启用flv支持,使用基于时间的偏移量文件 --with-http_gzip_static_module :在线压缩输出数据流 --with-http_image_filter_module=dynamic :图片缩略图功能,调整为动态 --with-http_mp4_module :启用对在线mp4视频文件支持 --with-http_perl_module=dynamic :支持构建嵌入式动态Perl模块 --with-http_random_index_module :从目录随机挑选一个目录索引 --with-http_realip_module :从报文头中更改客户端的IP地址,默认为关 --with-http_secure_link_module :计算和检查要求所需的安全链接网址 --with-http_slice_module :支持构建将请求拆分为子请求 --with-http_ssl_module :启用HTTPS支持,没这个就无法启用HTTPS模式 --with-http_stub_status_module :查看Nginx的状态页面 --with-http_sub_module :允许文本替换Nginx响应中的文本 --with-http_v2_module :支持HTTP/2模块 --with-http_xslt_module=dynamic :支持使用一个或者多个XSLT样式表转换XML响应模块 --with-mail=dynamic :启用POP3,IAMP4,SMTP代理模块 --with-mail_ssl_module:启用邮件代理模块的SSL功能 --with-pcre :启用pcre库 --with-pcre-jit :构建pcre库中间的pcre-jit指令 --with-stream=dynamic :允许为TCP/UDP代理和负载均衡模块 --with-stream_ssl_module :TCP/UDP流模块添加SSL/TLS协议支持 --with-stream_ssl_preread_module :在不终止SSL/TLS的情况下从消息中间获取信息 --with-threads :启用线程池 --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong :设置添加到GFLAGS变量参数 #下面的参数实在是看不懂,所以就不解释了,那行参数写的过于复杂
2023年01月02日
10 阅读
0 评论
0 点赞
2023-01-02
查看Nginx的日志文件并修改位置
本篇为本系列的扩展知识内容,通过扩展知识内容深入了解Nginx整个软件的基本结构查看Nginx的默认日志位置 #查看Nginx的编译配置内容 nginx -V #Nginx组件给的反馈内容 nginx version: nginx/1.20.1 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) built with OpenSSL 1.1.1k FIPS 25 Mar 2021 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' #--------------------分割-------------- #从以上反馈信息来看,访问错误日志在/var/log/nginx/error.log下,正常访问日志在/var/log/nginx/access.log下; #日志的位置是由编译的时候编译的默认位置为准,本次实验的服务器上所保存的日志文件为yum默认安装的Nginx目录下。 #遍历保存的日志文件目录 cd /var/log/nginx && ls -al查看当前日志文件 尝试修改日志文件的保存位置日志文件只能通过重新编译软件的方式重新编辑log文件位置下面来修改日志文件的位置 #重新配置Nginx的log文件位置(自己编译安装) #配置错误访问日志文件位置在/var/log/nginx/errorlog/error.log #配置正常访问日志文件位置在/var/log/nginx/accesslog/access.log #配置修改过的编译配置文件,一定是要你当前正在使用的Nginx配置文件修改,因为编译需要的插件环境每个人都不一样,注意:在生产环境下请勿使用本方法直接二次编译 ./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/errorlog/error.log --http-log-path=/var/log/nginx/accesslog/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' #在服务器上配置日志目录 mkdir -p /var/log/nginx/accesslog/ && mkdir -p /var/log/nginx/errorlog/ #八个线程编译Nginx make -j8 #进入编译完成的文件目录,并配置nginx的可执行权限 systemctl stop nginx cd objs/ && chmod a+x nginx #停止Nginx服务,并备份原来的Nginx软件 mv /usr/sbin/nginx /usr/sbin/nginx.bak cp nginx /usr/sbin/nginx #重新启动Nginx服务 systemctl start nginx
2023年01月02日
5 阅读
0 评论
0 点赞
2022-12-28
Nginx项目化实训一
本篇为本系列综合项目一,配置一个博客网站,并设置负载集群;本次需要使用四台服务器,一台数据库,三台Web服务器。安装MariaDB数据库#配置源 nano /etc/yum.repo.d/mariadb.repo #-----粘贴下部分-------------------------------- [mariadb] name = MariaDB baseurl = https://mirrors.ustc.edu.cn/mariadb/yum/10.2/centos7-amd64 gpgkey=https://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB gpgcheck=1 #----------------------------------------------- #清除当前缓存并重新生成 yum clean all yum makcahe #安装MariaDB数据库软件 yum -y install MariaDB-server MariaDB-client #启动mariadb以及设置开机自启 systemctl start mariadb && systemctl enable mariadb #--------------------分割------------------------- #初始化MariaDB服务 sudo mysql_secure_installation #初始化的选项 Enter current password for root (enter for none):<– 回车 Set root password? [Y/n] <– 设置root密码y New password: <– 设置root用户的密码(密码设置成
[email protected]
) Re-enter new password: <– 再输入一次你设置的密码 Remove anonymous users? [Y/n] <– 删除匿名用户y Disallow root login remotely? [Y/n] <–禁止远程root用户n Remove test database and access to it? [Y/n] <– 删除Test数据库y Reload privilege tables now? [Y/n] <– 重新加载权限表y #----------------------初始化完毕------------------ #使用root用户登录数据库 mysql -u root -p -h localhost -P 3306 #密码是
[email protected]
,刚才设置的 #设置typecho用户并配置本地登录,设置用户密码为typecho mysql> GRANT ALL PRIVILEGES ON *.* TO 'typecho'@localhost IDENTIFIED BY 'typecho' WITH GRANT OPTION; mysql > flush PRIVILEGES; #创建数据库(下面这一行需要输入分号) mysql> create database typecho_db; #查看数据库是不是创建了 MariaDB [(none)]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | typecho_db | +--------------------+ 4 rows in set (0.00 sec) MariaDB [(none)]> use mysql; #配置用户远程的登录 MariaDB [mysql]> update user set `host` = '%' where `user` = 'typecho' limit 1; #强制刷新 MariaDB [mysql]> flush privileges; 安装PHP7.3并配置php.ini,以及Typecho需要的插件同步安装,这里推荐使用MobaXterm的多执行方式同步安装#安装运行环境 yum -y install gcc gcc-c++ #安装第三方软件源 yum -y install epel-release #安装软件包 yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm #安装包管理器组件 yum -y install yum-utils #启用php7.3源 yum-config-manager --enable remi-php73 #安装PHP7需要的组件 yum -y install php php-mcrypt php-devel php-cli php-gd php-pear php-curl php-fpm php-mysql php-ldap php-zip php-fileinfo #安装扩展插件 #安装mbstring yum -y install php-mbstring #在php.ini设置mbstring弃用 nano /etc/php.ini #在文件内加入这一行 extension=mbstring.so #安装完了查看版本 #启动php-fpm,开机自启动 systemctl start php-fpm systemctl enable php-fpm使用多执行的方式安装Nginx,并配置参数配置前先下载Typecho文件 yum -y install wget unzip cd / mkdir -p /www/blog.nginx.test/ cd /www/blog.nginx.test/ wget https://github.com/typecho/typecho/releases/latest/download/typecho.zip unzip typecho.zip cd / chmod 777 /www/blog.nginx.test/ chmod 777 /www/blog.nginx.test/usr/uploads 签发SSL证书,使用WinSCP上传到主Nginx上上传到文件位置/cert/下重命名为local.crt以及local.key保存在/cert/文件目录下,等会配置文件要引用 #这里可以用编译的Nginx,也可以用yum安装的Nginx yum -y install epel-release yum -y install nginx #每台Nginx服务器的配置文件都不一样,需要多次确认 #----------------Nginx-2配置文件---------------------------- server { listen 80; server_name 10.0.0.90; root /www/blog.nginx.test/; index index.html index.htm index.php; location ~ ^/.+\.php { fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(/.*)$; fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; fastcgi_pass 127.0.0.1:9000; } } #-----------------分割-------------------------------------- #----------------Nginx-3配置文件---------------------------- server { listen 80; server_name 10.0.0.91; root /www/blog.nginx.test/; index index.html index.htm index.php; location ~ ^/.+\.php { fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(/.*)$; fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; fastcgi_pass 127.0.0.1:9000; } } #------------------分割------------------------------------ #----------------------Nginx-1主配置文件以及负载集群文件--- #下面的文件是配置文件,不需要上传SSL证书 server { listen 80; server_name 10.0.0.89; root /www/blog.nginx.test; index index.html index.htm index.php; location ~ ^/.+\.php { fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(/.*)$; fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; fastcgi_pass 127.0.0.1:9000; } } #--------------------配置负载集群文件--------------------------- upstream blog_local { #一定要ip_hash的方式负载,不然会出现掉登录的情况 ip_hash; server 10.0.0.89:80; server 10.0.0.90:80; server 10.0.0.91:80; } server { listen 80; listen 443 ssl; server_name blog.nginx.test; #配置SSL文件和SSL密钥串 ssl_certificate /cert/local.crt; ssl_certificate_key /cert/local.key; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4; ssl_prefer_server_ciphers on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_session_cache shared:SSL:5m; ssl_session_timeout 5m; #设置强制HTTPS if ($scheme = http) { return 301 https://$host$request_uri; } if (!-e $request_filename) { rewrite ^(.*)$ /index.php$1 last; } #引用当前的组,后面需要用到 location /{ proxy_pass http://blog_local; } #不加这个加载网页会不正常 location ~ .* { proxy_pass http://xd-project; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } 配置完Nginx之后配置Windows的hosts文件这里推荐用dism++直接修改hosts文件需要修改的HOSTS文件NGINXTEC HOSTS CHANGE10.0.0.89 blog.nginx.test本次实验使用服务器IP列表MariaDB数据库服务器IP:10.0.0.92Nginx主控服务器:10.0.0.89Nginx从服务器1:10.0.0.90Nginx从服务器2:10.0.0.91重启Nginx服务器,并在Windows的浏览器上浏览刚才搭建好的网站安装的时候需要注意一点,安装选择数据库的参数文件是这样的数据库IP地址:10.0.0.92,数据库用户名:typecho,数据库密码:typecho,数据库名:typecho_db下一步,网站链接使用https://blog.nginx.test不使用本链接会造成网页无法正常加载(这个决定服务器的文件外部文件引用,如果有错无法正确加载css和js文件,望悉知)另外两个从站可以从主站直接复制过去也可以另外安装,另外安装的网站在输入数据库信息之后提示数据存在选择保留原有数据继续安装。安装好后打开网站新建文章查看文章是否正常。 查看发布的文章是否正常 本次项目化实训一结束
2022年12月28日
7 阅读
0 评论
0 点赞
2022-12-28
Nginx配置正向代理
Nginx正向代理是和SOCKS5一样的类型的工具,Nginx的正向代理又称HTTP代理,工作在第七层可以通过Nginx的正向代理去访问某些不能被访问的网站。配置Nginx正向代理Nginx自带的正向代理模块不支持HTTPS正向代理,仅支持HTTP正向代理,所以这里需要编译第三方的正向代理模块。 yum -y install patch #下载第三方插件模块 cd /nginx-moduls wget https://github.com/chobits/ngx_http_proxy_connect_module/archive/master.zip yum -y install unzip && unzip master.zip mv ngx_http_proxy_connect_module-master nginx-http-proxy cd / #下面的操作全部回车,默认就行 #查看做实验虚拟机的参数配置文件 nginx -V #复制看到的参数配置文件,如下(如果是用yum安装的和下面肯定一致) ./configure --prefix=/etc/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 --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --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-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' #安装编译环境 yum -y install gcc gcc-c++ pcre pcre-devel openssl openssl-devel zlib zlib-devel gd gd-devel #创建用户,如果直接使用做实验的机器则不需要此操作 useradd -s /sbin/nologin nginx #安装依赖库1 必装 sudo yum install -y libxml2-devel.x86_64 #安装依赖库2 必装 sudo yum install -y libxslt-devel.x86_64 #下载Nginx源码包 wget https://nginx.org/download/nginx-1.22.1.tar.gz tar -xvf nginx-1.22.1.tar.gz #进入解压好的源码包 cd nginx-1.22.1/ #配置插件包,使用Nginx 1.22.1以及1.23以上的需要用102101文件,不然会报错 patch -p1 < /nginx-moduls/nginx-http-proxy/patch/proxy_connect_rewrite_102101.patch #下面编写Nginx的配置文件内容,准备编译(下面是已经准备好的配置文件) ./configure --prefix=/etc/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 --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --add-module=/nginx-moduls/nginx-http-proxy --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --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-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' #--------------------------------------------------------- #返回下面的参数就代表可以准备编译了 Configuration summary + using threads + using system PCRE library + using system OpenSSL library + using system zlib library nginx path prefix: "/etc/nginx" nginx binary file: "/usr/sbin/nginx" nginx modules path: "/usr/lib64/nginx/modules" nginx configuration prefix: "/etc/nginx" nginx configuration file: "/etc/nginx/nginx.conf" nginx pid file: "/var/run/nginx.pid" nginx error log file: "/var/log/nginx/error.log" nginx http access log file: "/var/log/nginx/access.log" nginx http client request body temporary files: "/var/cache/nginx/client_temp" nginx http proxy temporary files: "/var/cache/nginx/proxy_temp" nginx http fastcgi temporary files: "/var/cache/nginx/fastcgi_temp" nginx http uwsgi temporary files: "/var/cache/nginx/uwsgi_temp" nginx http scgi temporary files: "/var/cache/nginx/scgi_temp" #--------------分割----------------- #这里只要编译,不需要编译安装,所以不要make install,会出错的 #八个线程编译源码包 make -j8 #如果出现编译失败请删除之前的旧编译环境 #编译好了之后进入objs文件夹,里面有编译好的Nginx文件,复制到需要配置Nginx的服务器上 #停掉Nginx服务 systemctl stop nginx #复制Nginx文件到/usr/sbin/下 #配置可执行权限 chmod a+x /usr/sbin/nginx #配置查看Nginx配置文件有没有新编译的插件在上面 nginx -v #启动Nginx服务器 systemctl start nginx查看配置文件有没有刚才编译的插件 查看到Nginx正向代理插件安装成功了,下面配置Nginx配置文件 server { resolver 223.5.5.5 ipv6=off; resolver_timeout 5s; listen 880; proxy_connect; proxy_connect_allow 443 80; proxy_connect_connect_timeout 20s; proxy_connect_read_timeout 20s; proxy_connect_send_timeout 20s; location / { proxy_pass $scheme://$http_host$request_uri; } } 上面的配置文件配置完了重启Nginx服务器 systemctl restart nginx在另外一台Linux上打开网络,HTTP代理,输入以下参数HTTP代理IP地址10.0.0.113;端口880;设置完的结果截图 保存,使用curl命令试试能不能curl访问到一baiducurl http://baidu.com 经过测试,网站已经通过HTTP代理打开
2022年12月28日
22 阅读
0 评论
0 点赞
2022-12-28
Nginx实现服务器动静分离
Nginx可以实现动态和静态分离的操作,一般情况下用于Nginx分离PHP或者Nginx分离js脚本,通过请求的类型转发请求到应用服务器;本篇文章讲解使用Nginx配置PHP分离文件。PHP FastCGI配置分离的Nginx配置文件PHP服务器IP:10.0.0.99:9000Nginx服务器IP:10.0.0.113测试网站使用之前配置的blog服务器 location ~ ^/.+\.php { fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(/.*)$; fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; fastcgi_pass 10.0.0.99:9000; } PHP独立服务器安装PHP7.3 #安装运行环境 yum -y install gcc gcc-c++ #安装第三方软件源 yum -y install epel-release #安装软件包 yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm #安装包管理器组件 yum -y install yum-utils #启用php7.3源 yum-config-manager --enable remi-php73 #安装PHP7需要的组件 yum -y install php php-mcrypt php-devel php-cli php-gd php-pear php-curl php-fpm php-mysql php-ldap php-zip php-fileinfo #安装完了查看版本 php -v #安装版本信息 PHP 7.3.33 (cli) (built: Dec 19 2022 14:30:27) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.33, Copyright (c) 1998-2018 Zend Technologies #启动php-fpm,开机自启动 systemctl start php-fpm systemctl enable php-fpm #防火墙放行端口9000 TCP firewall-cmd --add-port=9000/tcp --zone=public --permanent firewall-cmd --reload #可以关闭防火墙,在实际生产环境中间请勿随意关闭防火墙 #关闭SELINUX,不关闭所有服务只有OpenSSH服务是可以被访问的,其他的服务都无法通过网络访问 setenforce 0 #临时关闭SELINUX #安装mbstring yum -y install php-mbstring #在php.ini设置mbstring弃用 nano /etc/php.ini #在文件内加入这一行 extension=mbstring.so #保存重启PHP-FPM systemctl restart php-fpm修改Nginx的配置文件 upstream php-fastcgi { server 127.0.0.1:9000; server 10.0.0.113:9000; } server { listen 80; listen 443 ssl; server_name blog.nginx.test; alias /www/blog.nginx.test; index index.html index.htm index.php; ssl_certificate /cert/local.crt; ssl_certificate_key /cert/local.key; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4; ssl_prefer_server_ciphers on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_session_cache shared:SSL:5m; ssl_session_timeout 5m; if ($scheme = http) { return 301 https://$host$request_uri; } if (!-e $request_filename) { rewrite ^(.*)$ /index.php$1 last; } location ~ ^/.+\.php { fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(/.*)$; fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; fastcgi_pass php-fastcgi; } #设置缓存3天 location ~* \.(js|css|jpg|gif|png|bmp|swf)$ { expires 3d; } } 重启Nginx服务后打开浏览器查看网站能不能正常打开 systemctl restart nginx浏览器打开网站
2022年12月28日
3 阅读
0 评论
0 点赞
2022-12-26
Nginx配置PHP网页(高级)
本篇为本系列教程第三个项目实战内容,本次内容需要配置Nginx,MariaDB,PHP7.3搭建Typecho网站。搭建之前先下载Typecho的安装包: >>>下载<<< CentOS下安装MariaDB #配置源 nano /etc/yum.repo.d/mariadb.repo #-----粘贴下部分----- [mariadb] name = MariaDB baseurl = https://mirrors.ustc.edu.cn/mariadb/yum/10.2/centos7-amd64 gpgkey=https://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB gpgcheck=1 #------------------- #清除当前缓存并重新生成 yum clean all yum makcahe #安装MariaDB数据库软件 yum -y install MariaDB-server MariaDB-client #启动mariadb以及设置开机自启 systemctl start mariadb && systemctl enable mariadb #--------------------分割------------------------- #初始化MariaDB服务 sudo mysql_secure_installation #初始化的选项 Enter current password for root (enter for none):<– 回车 Set root password? [Y/n] <– 设置root密码y New password: <– 设置root用户的密码(密码设置成
[email protected]
) Re-enter new password: <– 再输入一次你设置的密码 Remove anonymous users? [Y/n] <– 删除匿名用户y Disallow root login remotely? [Y/n] <–禁止远程root用户n Remove test database and access to it? [Y/n] <– 删除Test数据库y Reload privilege tables now? [Y/n] <– 重新加载权限表y #----------------------初始化完毕------------------ #使用root用户登录数据库 mysql -u root -p -h localhost -P 3306 #密码是
[email protected]
,刚才设置的 #设置typecho用户并配置本地登录,设置用户密码为typecho mysql> GRANT ALL PRIVILEGES ON *.* TO 'typecho'@localhost IDENTIFIED BY 'typecho' WITH GRANT OPTION; mysql > flush PRIVILEGES; #创建数据库(下面这一行需要输入分号) mysql> create database typecho_db; #查看数据库是不是创建了 MariaDB [(none)]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | typecho_db | +--------------------+ 4 rows in set (0.00 sec) MariaDB [(none)]> 安装PHP-FPM模块 #安装运行环境 yum -y install gcc gcc-c++ #安装第三方软件源 yum -y install epel-release #安装软件包 yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm #安装包管理器组件 yum -y install yum-utils #启用php7.3源 yum-config-manager --enable remi-php73 #安装PHP7需要的组件 yum -y install php php-mcrypt php-devel php-cli php-gd php-pear php-curl php-fpm php-mysql php-ldap php-zip php-fileinfo #安装完了查看版本 php -v #安装版本信息 PHP 7.3.33 (cli) (built: Dec 19 2022 14:30:27) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.33, Copyright (c) 1998-2018 Zend Technologies #启动php-fpm,开机自启动 systemctl start php-fpm systemctl enable php-fpm 不编译安装Nginx 1.22 yum -y install epel-release yum -y install nginx systemctl start nginx && systemctl enable nginx上传Typecho的安装包文件到CentOS,配置路径使用WinSCP工具上传到CentOS 下面对文件进行操作 cd /www/blog.nginx.test unzip typecho.zip Archive: typecho.zip inflating: LICENSE.txt creating: admin/ creating: admin/img/ inflating: admin/img/
[email protected]
inflating: admin/img/ajax-loader.gif inflating: admin/img/typecho-logo.svg inflating: admin/img/
[email protected]
inflating: admin/img/icons.png ........ #-------- ls admin index.php install install.php LICENSE.txt typecho.zip usr var #------------------------ cd /www chmod 777 blog.nginx.test/ 使用KeyManager签发一个SSL证书,域名为blog.nginx.test将证书名字改成local.crt,私钥文件名字改成local.key,上传到服务器的/cert目录下,设置cert目录权限为777配置Nginx网站配置文件 nano /etc/nginx/conf.d/blog.nginx.test.conf #------下面为Nginx网站配置文件 server { listen 80; listen 443 ssl; server_name blog.nginx.test; alias /www/blog.nginx.test; index index.html index.htm index.php; ssl_certificate /cert/local.crt; ssl_certificate_key /cert/local.key; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4; ssl_prefer_server_ciphers on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_session_cache shared:SSL:5m; ssl_session_timeout 5m; if ($scheme = http) { return 301 https://$host$request_uri; } if (!-e $request_filename) { rewrite ^(.*)$ /index.php$1 last; } location ~ ^/.+\.php { fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(/.*)$; fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; fastcgi_pass 127.0.0.1:9000; } #设置缓存3d location ~* \.(js|css|jpg|gif|png|bmp|swf)$ { expires 3d; } } #---------Nginx配置文件配置完毕重启Nginx服务器 systemctl restart nginx最后步骤 #安装mbstring yum -y install php-mbstring #在php.ini设置mbstring弃用 nano /etc/php.ini #在文件内加入这一行 extension=mbstring.so #保存重启PHP-FPM和Nginx服务器 systemctl restart php-fpm && systemctl restart nginx #设置上传目录权限 cd /网站目录 chmod 777 usr/uploads打开浏览器输入https://blog.nginx.test/install.php出现证书问题不需要管,证书是自签名的,自签名的证书一般不信任。安装Typecho 设置数据库参数(一开始设置的用户名密码和数据库名) 设置用户名和密码(密码设置成
[email protected]
) 设置完成后发布一个文章 查看数据库有没有出现数据表
2022年12月26日
16 阅读
0 评论
0 点赞
2022-12-26
Nginx配置PHP网页(初级)
Nginx作为Web服务器来讲,并不能处理动态请求,例如PHP网页,Nginx只能将请求转给PHP运行池,PHP运行池通过PHP解释器运行PHP语句。使用php-fpm(PHP FastCGI Process Manager: FastCGI进程管理器)安装PHP-FPM#安装运行环境 yum -y install gcc gcc-c++ #安装第三方软件源 yum -y install epel-release #安装软件包 yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm #安装包管理器组件 yum -y install yum-utils #启用php7.3源 yum-config-manager --enable remi-php73 #安装PHP7需要的组件 yum -y install php php-mcrypt php-devel php-cli php-gd php-pear php-curl php-fpm php-mysql php-ldap php-zip php-fileinfo #安装完了查看版本 php -v #安装版本信息 PHP 7.3.33 (cli) (built: Dec 19 2022 14:30:27) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.33, Copyright (c) 1998-2018 Zend Technologies #启动php-fpm,开机自启动 systemctl start php-fpm systemctl enable php-fpmPHP-FPM默认监听的FastCGI端口是9000 TCP在Nginx上设置PHP运行池 server { listen 80; server_name php.nginx.test; root /www/php.nginx.test; index index.html index.htm index.php; location ~ ^/.+\.php { fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(/.*)$; fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; fastcgi_pass 127.0.0.1:9000; } location ~* \.(js|css|jpg|gif|png|bmp|swf)$ { expires 3d; } }创建一个PHP脚本,位置放到你们设置的Nginx网站的位置,本教程在/www/php.nginx.test/下 <?php echo("this is php website!"); ?>由于配置的域名实际并不存在,所以这里需要在hosts里面键入当前的域名,并重启Nginx服务127.0.0.1 php.nginx.test测试php网页是否正常,使用curl命令 curl http://php.nginx.test/index.php查看测试结果 PHP 配置完成
2022年12月26日
3 阅读
0 评论
0 点赞
2022-12-20
Nginx使用TCP代理实战项目
本篇是本系列第二篇实战内容小李是某网络公司的运维,由于近期新冠肺炎疫情的影响,该网络公司的程序员需要居家办公,由于生产环境各程序员需要在家里远程连接公司的生产环境机房里面的服务器,但是由于生产环境不能直接暴露在公网环境下,所以现需要连接生产环境服务器的SSH端口以及SOCKS服务端口项目需求分析:SOCKS默认端口:1080SSH默认端口:22目标服务器:10.0.1.1Nginx转发的服务器地址:10.0.0.113安装SOCKS5代理服务器#安装依赖 yum -y install gcc openldap-devel pam-devel openssl-devel wget http://jaist.dl.sourceforge.net/project/ss5/ss5/3.8.9-8/ss5-3.8.9-8.tar.gz tar -xvf ss5-3.8.9-8.tar.gz cd ss5-3.8.9/ ./configure make && make install #目前配置文件保留的位置 nano /etc/opt/ss5.conf #添加以下内容(配置方便不使用密码登录) { permit - 0.0.0.0/0 - 0.0.0.0/0 - - - - - permit u 0.0.0.0/0 - 0.0.0.0/0 - - - - - auth 0.0.0.0/0 - - auth 0.0.0.0/0 - u } #给SOCKS5可执行能力 chmod a+x /tc/init.d/ss5 #启动SOCKS5 service ss5 start 配置服务器防火墙 systemctl start firewalld systemctl enable firewalld firewall-cmd --add-port=8022/tcp --zone=public --permanent firewall-cmd --add-port=10808/tcp --zone=public --permanent firewall-cmd --reload配置Nginx的TCP转发文件 nano /etc/nginx/stream.d/ftp-ssh.conf upstream ssh_local { server 10.0.1.1:22; } server { listen 8022; proxy_pass ssh_local; } upstream socks_local { server 10.0.1.1:1080; } server { listen 10808; proxy_pass socks_local; }测试是否转发成功 测试SOCKS服务器是否能正常转发流量 因为软件显示的问题,实际的速度比这个要高
2022年12月20日
14 阅读
0 评论
0 点赞
2022-12-20
Nginx实现UDP流量转发
Nginx从1.9之后支持UDP/TCP 第四层流量转发,接上一次的转发TCP流量,本次转发UDP流量;本次转发8.8.8.8的DNS流量。Nginx转发8.8.8.8 53UDPStream配置文件 stream { upstream local_dns { server 8.8.8.8:53; } server { listen 53 udp; proxy_pass local_dns; } }重启Nginx服务 systemctl restart nginx测试本机有没有转发8.8.8.8的流量 使用Windows客户端测试是否转发流量
2022年12月20日
16 阅读
0 评论
0 点赞
2022-12-18
Nginx实现TCP流量转发
Nginx的功能非常强大,Nginx从1.9之后开始支持了TCP 以及UDP流量转发的功能,Nginx以前转发流量只能通过第七层的HTTP流量转发,不能直接通过第四层的流量转发,非常消耗服务器资源;这里就使用OpenSSH的22端口转发到8022端口上,Nginx配置TCP流量转发写在开头,stream插件的配置文件等级和http同级,因为http模块里面只能写网站配置文件的内容,stream只能写第四层流量转发的内容,两者不能混着写在一起。stream参数仅可以写TCP/UDP转发配置,http参数只能写网站配置文件参数。配置前先修改Nginx的主配置文件 nano /etc/nginx/nginx.conf #Nginx主配置文件 #省略上部分 stream { #引用外部文件 include /etc/nginx/stream.d/*.conf; }配置Nginx网站配置文件 nano /etc/ngixn/stream.d/192.168.197.141.conf #用之前的配置文件为基础修改配置文件 #Nginx配置文件部分 stream { upstream local_ssh{ server 127.0.0.1:22; } server { #注意一点,不能配置server_name在stream配置文件里面 listen 8022; proxy_pass local_ssh; } }测试8022是不是转发到了22端口上 实测,本地22端口被转发到了8022端口上Windows 10 tcping测试 测试已监听8022端口Windows10 OpenSSH测试8022端口 Windows10测试已成功
2022年12月18日
13 阅读
0 评论
0 点赞
2022-12-16
Nginx搭建WebDav服务器
WebDav是用超文本传输协议的方法在服务器上划出一个存储块,用户可以使用用户名和密码访问存储在WebDav上的文件;WebDav可以直接挂载到本地当本地磁盘使用,目前的苹果iCloud,谷歌Google 云盘以及微软的OneDrive都是以WebDav的形式挂载到客户端的Nginx配置WebDav由于之前安装的Nginx并不包含第三方插件的WebDav,所以这里需要自己编译安装WebDav插件,(无缝切换Nginx版本) #查看做实验虚拟机的参数配置文件 nginx -V #复制看到的参数配置文件,如下(如果是用yum安装的和下面肯定一致) ./configure --prefix=/etc/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 --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --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-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' #安装编译环境 yum -y install gcc gcc-c++ pcre pcre-devel openssl openssl-devel zlib zlib-devel gd gd-devel #创建用户,如果直接使用做实验的机器则不需要此操作 useradd -s /sbin/nologin nginx #安装依赖库1 必装 sudo yum install -y libxml2-devel.x86_64 #安装依赖库2 必装 sudo yum install -y libxslt-devel.x86_64 #下载Nginx源码包 wget https://nginx.org/download/nginx-1.22.1.tar.gz tar -xvf nginx-1.22.1.tar.gz #下载WebDav环境包 mkdir -p /nginx-moduls/ #如果git不了就下载webdav插件包,复制到虚拟机再进行编译安装(插件包需要放在/nginx-moduls/nginx-webdav目录下面或者更改编译配置文件中间的–with-http_dav_module --add-module=/nginx-moduls/nginx-webdav参数,add-module是插件路径,如果目录不一样需要自己修改) git clone https://github.com/arut/nginx-dav-ext-module.git /nginx-moduls/nginx-webdav #编译Nginx cd nginx-1.22.1/ #复制下面的参数配置文件(已经调好配置文件了,添加了这一行–with-http_dav_module --add-module=/nginx-moduls/nginx-webdav ) ./configure --prefix=/etc/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 -–with-http_dav_module --add-module=/nginx-moduls/nginx-webdav --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --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-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' #可以编译了,注意,不要执行make install,如果执行了当前的Nginx服务会出现问题 make #停止当前Nginx服务,并备份当前Nginx的应用文件(一定要停止,不停止会报错) systemctl stop nginx mv /usr/sbin/nginx /usr/sbin/nginx.bak #进入objs文件目录,给编译好的nginx附上可执行 cd objs/ chmod a+x nginx cp nginx /usr/sbin/ #启动服务 systemctl start nginx #查看是否编译了WebDav功能 nginx -V接上操作,可以看见支持了WebDav 配置目录加密 yum -y install httpd-tools mkdir -p /user/dav-pasword/ htpasswd -c /user/dav-password/.auth_password user1 Password:123456网站配置文件(可设置HTTPS加密,这里不做示范) server { listen 80; #配置虚拟名称 server_name webdav.nginx.test; location / { #配置目录如果配置了访问路径需要把root改成alias root /www/webdav.nginx.test; #配置缓存位置 dav_methods PUT DELETE MKCOL COPY MOVE; #启用 WebDav 的一些扩展关键字用于支持应用访问 dav_ext_methods PROPFIND OPTIONS; #设置 WebDav 目录下新增文件的默认权限 dav_access user:rw group:rw all:r; #创建文件夹时自动创建路径上不存在的文件夹 create_full_put_path on; #设置报文最大长度便于文件传输,这里为8MB client_max_body_size 8m; #让 nginx 自动生成索引页面,避免 403 错误 autoindex on; #---------------分割--------------- #配置目录加密,同前面的目录加密方法一样 #设置登录页面名称 auth_basic "User Login"; auth_basic_user_file /user/dav-password/.auth_password; } } 重启Nginx服务器 systemctl restart nginx在上图配置的目录内创建几个文件夹 cd /www/webdav.nginx.test mkdir test1 test2 test3 test4 下面测试curl能不能正常获取401参数 使用WinSCP工具测试是否创建了WebDav 后面会提示让你输入用户名和密码,用户名和密码为之前创建的user1 123456 输入之后进入WebDav 此时测试一下能不能在WebDav内复制文件,我们从桌面拖动一个文件进去 查看上传结果 到服务器上查看这个文件是不是存在的 目前看到在服务器内该文件是存在的
2022年12月16日
29 阅读
0 评论
1 点赞
2022-12-15
Nginx配置目录加密访问
有些情况下Nginx服务器下面的东西是不能被其他用户随意访问的,所以一般的手段是对该目录进行加密,需要指定拥有密码的用户使用密码访问。Nginx配置加密目录首先配置加密文件 yum -y install httpd-tools mkdir -p /user/dir-pasword/ htpasswd -c /user/dir-password/.auth_password user1 Password:123456配置HTML文件 mkdir -p /www/password.nginx.test/ nano /www/password.nginx.test/index.html <html> <body><p>Password Test</p></body> </html>配置Nginx网站配置文件 server { listen 80; #如果需要配置SSL下面自行配置SSL,这里不做示范 #本次实验可以在之前的配置文件中间添加使用,也可以自己新建一个站点,新建站点需要添加hosts文件 server_name password.nginx.test; location /password { #这一行引号内的可以自定义,稍后会演示这个的用途 auth_basic "User Login"; auth_basic_user_file /user/dir-password/.auth_password; #如果上方的location后面是一个"/"那么填写root或者alias都没有问题,如果上面的是/password,那么这个访问的时候查找的是/www/password.nginx.test/pasword/index.html,而不是直接找对应的目录 alias /www/password.nginx.test/; index index.html index.htm; } } 重启Nginx服务,curl http://password.nginx.test/password 提示401被加密,浏览器访问该页面,看到设置提示User Login 登录后查看页面
2022年12月15日
12 阅读
0 评论
0 点赞
2022-12-13
使用Nginx搭建一个远程打印机服务器
本篇为本系列第一个实战项目,使用Nginx的443端口搭建一个打印机服务器,本文需要的软件有cups和Nginx以及一个签名签好的SSL证书,服务器为CentOS7,客户端为CentOS7本机 20H2cups(苹果公司开发的打印机服务器软件)安装cups yum -y install epel-release yum -y install cups systemctl start cups ss -ant #如果ss -ant之后能看到631端口被监听那就是启动了cups服务,打开浏览器访问cups管理面板,添加一个PDF打印机(因为没有实体打印机) yum -y install cups-pdf浏览器打开服务器IP地址+:631端口访问管理面板点击Printer,能显示打印机名称上面的打印机URL就是这台打印机的共享目录,这个复制好这是我的打印机共享目录http://127.0.0.1:631/printers/Cups-PDF然后打开Nginx,上传SSL证书,然后反向代理127.0.0.1:631,监听80端口然后开启强制HTTPS。 server { listen 80; listen 443 ssl; server_name 192.168.197.141; ssl_certificate /crt/192.168.197.141/192.168.197.141.crt; ssl_certificate_key /crt/192.168.197.141/192.168.197.141.key; ssl_session_timeout 5m; ssl_session_cache shared:SSL:5m; ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4; ssl_prefer_server_ciphers on; #强制HTTPS跳转 if ($scheme = http) { return 301 https://$host$request_uri; } location / { proxy_pass http://127.0.0.1:631; } }打开CentOS的打印机管理工具,因为Linux的默认打印机协议是ipp,这里直接输入默认的ipp://192.168.197.141/printers/Cups-PDF共享路径即可访问共享(走SSL)因为Nginx反向代理了打印机,会自动HTTPS加密(还可以过CDN)(实际测试过可以过CloudFlare)因为cups本身就是HTTP原理。 输入上面的ipp://192.168.197.141/printers/Cups-PDF添加,驱动选择Generic->型号CUPS-PDF->应用然后查看打印机面板,已添加一台打印机
2022年12月13日
40 阅读
0 评论
0 点赞
2022-12-12
Nginx配置负载集群
Nginx的负载集群是基于的反向代理实现的,对主服务器的要求非常高,实际上使用反向代理的时候负载服务器要求最高,负载集群服务器决定了整个业务的资源分配和所有压力;Nginx配置负载集群Nginx的负载集群主要配置的是upstream组,upstream组里面为负载服务器。配置负载集群upstream配置文件 upstream stream_server { server 127.0.0.1:8080; server 127.0.0.1:8081; server 127.0.0.1:8082; server 127.0.0.1:8083; }这种情况下的负载集群只能在某个服务器down的情况下才可以切换服务器,而且也会造成一台服务器连接数爆满,其他的服务器空闲资源太多;而且没有权重设置所以upstream配置文件需要改成下面的样子(添加权重) upstream stream_server { server 127.0.0.1:8080 weight=1; server 127.0.0.1:8081 weight=1; server 127.0.0.1:8082 weight=1; server 127.0.0.1:8083 weight=1; }weight=1为权重平分,也就是负载流量平均分配几台设备,通俗一点就是4个客户机访问服务,然后客户机的访问流量会平均分配给四台服务器;如果是8个客户机访问服务器,那就是每台服务器会承载2个用户的访问。如果出现硬件资源有差别的情况,则可以修改权重,假设上面的8080端口服务器性能很强,是其他几台服务器的7倍,那上面的权重可以修改成下面的样子 upstream stream_server { server 127.0.0.1:8080 weight=7; server 127.0.0.1:8081 weight=1; server 127.0.0.1:8082 weight=1; server 127.0.0.1:8083 weight=1; }上面的为例,假设有10个并发请求,其中第一台服务器总共承载10个中间的7个,下面的三台分别承载1个请求。标记upstream组里面的服务器的状态为down。 upstream stream_server { server 127.0.0.1:8080 down; server 127.0.0.1:8081 weight=1; server 127.0.0.1:8082 weight=1; server 127.0.0.1:8083 weight=1; }当第一台服务器被标记成down的时候,那这个服务器就默认不请求,只请求下面三台在线的设备。配置备份服务器,假设有三台负载均衡服务器,upstream文件的内容 upstream stream_server { server 127.0.0.1:8080 down; server 127.0.0.1:8081 backup; server 127.0.0.1:8082 weight=1; }上述配置文件配置第一台服务器down状态,第二台服务器为备份服务器,第三台为正常负载服务器。Nginx正确配置负载集群 upstream stream_server { #实际使用业务的时候需要使用ip_hash保证一个连接数在关闭之前都连接一台服务器 ip_hash; #节省时间,就配置两台服务器,并且不配置权重,配置权重的实验不太好演示,需要大量的连接数才可以测试出结果。 #注意,upstream组里面的web服务器负载集群必须是能正常访问的(不能正常访问是不能成功重启Nginx服务的) server 127.0.0.1:8080; server 127.0.0.1:8081; } server { listen 80; server_name upstream.nginx.test; client_max_body_size 1024M; #反向代理upstream组 location / { proxy_pass http://stream_server; proxy_set_header Host $host:$server_port; } }8080端口网页的HTML文件<html> <body><p>Server 1</p></body> </html>8081端口的网页的HTML文件<html> <body><p>Server 2</p></body> </html>然后就是贴出两个网站的Nginx配置文件8080网站配置文件 server { listen 8080; server_name 127.0.0.1; location /{ root /www/web1/; index index.html index.htm; } }8081网站配置文件 server { listen 8081; server_name 127.0.0.1; location / { root /www/web2/; index index.html index.htm; } }测试curl测试服务器请求,请求之后关闭对应的服务器后再次请求 然后关闭Server 2,再次请求 服务器已经切换到服务器1上配置强制HTTPS同前面的设置方法配置HTTPS,网站配置文件 #upstream组配置文件 upstream stream_server { #实际使用业务的时候需要使用ip_hash保证一个连接数在关闭之前都连接一台服务器 ip_hash; #节省时间,就配置两台服务器,并且不配置权重,配置权重的实验不太好演示,需要大量的连接数才可以测试出结果。 #注意,upstream组里面的web服务器负载集群必须是能正常访问的(不能正常访问是不能成功重启Nginx服务的) server 127.0.0.1:8080; server 127.0.0.1:8081; } #网站配置文件 server { listen 80; listen 443 ssl; server_name upstream.nginx.test; #设置SSL证书和SSL密钥的位置(绝对路径) ssl_certificate /crt/upstream.nginx.test/upstream.nginx.test.crt; ssl_certificate_key /crt/upstream.nginx.test/upstream.nginx.test.key; #设置超时5分钟 ssl_session_timeout 5m; #配置ssl_session缓存 ssl_session_cache shared:SSL:5m; #配置SSL协议1.1 1.2 1.3 ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #配置加密套件(这里给个通用写法,因为加密类型比较多)OpenSSL标准 ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4; ssl_prefer_server_ciphers on; #设置强制HTTPS,注意Nginx下面的if语句的括号周围需要空格,不能顶格写 if ($scheme = http) { return 301 https://$host$request_uri; } location / { proxy_pass http://stream_server; } }测试HTTP会不会强制301到HTTPS以及直接测试HTTPS #使用curl命令的时候记得要加-k参数 curl -k https://upstream.nginx.test #修改完参数记得要重启Nginx systemctl restart nginx
2022年12月12日
13 阅读
0 评论
2 点赞
2022-12-12
Nginx反向代理的应用
Nginx反向代理一般情况下指代理服务器接受互联网上的连接请求,然后将请求的内容转发到目标服务器上,目标服务器上的请求再通过代理服务器返回到客户端;这种方式能让真正的业务服务器不能直接通过公网的方式请求到,只能通过代理服务器代理之后再请求服务器。Nginx设置反向代理首先设置一个HTML静态页面<html> <body><p>Test Nginx Proxy</p></body> </html>然后保存到/www/127.0.0.1/目录下,保存文件名为index.html设置网站配置文件 server { #端口设置成81,等会反向代理设置的时候代理成80端口 listen 81; #主机名可以设置成IP地址 server_name 127.0.0.1; location / { root /www/127.0.0.1/; index index.html index.htm; } } systemctl restart nginx #记住要重启Nginx才可以生效配置文件设置完之后使用curl命令获取页面参数 curl http://127.0.0.1:81这是curl之后的结果 下面设置反向代理的参数首先在hosts文件内设置一个域名对应的参数(等会要用到)设置一个根本不会撞到的域名 www.nginx.test nano /etc/hosts 127.0.0.1 www.nginx.test然后设置反向代理站的配置文件 server { listen 80; server_name www.nginx.test; location / { #设置反向代理 proxy_pass http://127.0.0.1:81; } }重启Nginx服务器,curl http://www.nginx.test 查看返回结果 查看返回结果可以看出,反向代理之后自动转发到127.0.0.1地址的80端口上,实现了服务器代理访问HTTP服务同理,在反向代理的时候开启强制HTTPS访问,网站虽然经过了反向代理,隐藏了真实的服务器IP地址,但是数据传输还是会以明文的方式传送到代理服务器上;将上述反向代理文件小改 server { #监听80端口和443端口 listen 80; listen 443 ssl; #设置网站的名称 server_name www.nginx.test; #设置SSL证书和SSL密钥的位置(绝对路径) ssl_certificate /crt/www.nginx.test/www.nginx.test.crt; ssl_certificate_key /crt/www.nginx.test/www.nginx.test.key; #设置超时5分钟 ssl_session_timeout 5m; #配置ssl_session缓存 ssl_session_cache shared:SSL:5m; #配置SSL协议1.1 1.2 1.3 ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #配置加密套件(这里给个通用写法,因为加密类型比较多)OpenSSL标准 ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4; ssl_prefer_server_ciphers on; #设置强制HTTPS,注意Nginx下面的if语句的括号周围需要空格,不能顶格写 if ($scheme = http) { return 301 https://$host$request_uri; } location / { #设置反向代理 proxy_pass http://127.0.0.1:81; } }保存退出后重启Nginx服务 systemctl restart nginx使用curl命令尝试是否被强制301到HTTPS上 然后使用curl命令请求SSL页面(需要-k参数忽略安全性) curl -k https://www.nginx.testHTTPS请求结果
2022年12月12日
10 阅读
0 评论
0 点赞
2022-12-11
Nginx配置SSL并设置强制HTTPS
HTTPS(超文本安全传输协议)是现代网站常用的访问加密手段,使用范围非常广泛,各大银行网站,购物网站以及绝大部分涉及到核心商业利益的网站都使用了HTTPS协议;本文详细解释基于CentOS下使用Nginx搭建HTTPS网站。首先需要的软件 KeyManager (亚洲诚信) >>>下载软件<<< CentOS7 + Nginx首先签发一个SSL证书,打开KeyManager,然后点击创建证书,证书类型为服务器证书,名称填写localhost(因为没有实际的域名,不太好指定证书),其他的默认,点击创建证书 导出证书,导出类型为Nginx(pem) 导出之后上传到服务器里面,找到Nginx的网站配置文件 #在网站配置文件下面添加一条server参数 server{ #监听443端口(HTTPS监听的是443端口HTTP监听的是80端口) listen 80; listen 443 ssl; #服务器主机名 server_name localhost; #证书文件位置,以你上传的位置为准 ssl_certificate /crt/localhost/localhost_chain.crt; #证书密钥文件位置,以你上传的位置为准 ssl_certificate_key /crt/localhost/localhost_key.key; #设置超时5分钟 ssl_session_timeout 5m; #配置ssl_session缓存 ssl_session_cache shared:SSL:5m; #配置SSL协议 ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #配置加密套件(这里给个通用写法,因为加密类型比较多)OpenSSL标准 ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4; ssl_prefer_server_ciphers on; #配置强制HTTPS if ($scheme = http) { #这一行的括号需要有空格,不然重启会报错 return 301 https://$host$request_uri; } location / { root /www/html; index index.html index.htm; } }编辑完毕之后重启Nginx服务,如果遇到报错就使用 systemctl status nginx #查看文件哪里报错了配置完重启不报错了那就测试功能是否正常 #使用curl命令请求本地页面,正确配置是301 curl http://localhost #使用curl -k因为证书是自己签名的,所以一般情况下不受信用的 curl -k https://localhost 现在可以看见HTTPS curl之后的网页
2022年12月11日
5 阅读
0 评论
0 点赞
2022-12-10
Nginx做重定向
重定向分为301重定向和302重定向301重定向是永久重定向,例如某论坛更换了域名,但是原来搜索引擎SEO优化只有原来的域名才有,新的域名没有SEO优化,重新更新优化需要时间,所以需要在原来的域名上做301永久重定向;在重定向之后原来的域名和URL都会被重定向到新的域名和URL上,这种操作在SEO优化里面是可以被允许的,或者301被用来强制HTTPS,在很多有重要服务的网站,没有SSL加密是很危险的事情,可能会导致信息泄露,所以可以在用户请求的时候判断是不是http协议请求的网站,如果条件成立就强制301到HTTPS的网站上。302是临时重定向,浏览器会认为请求的域名是临时的,所以不会直接回显重定向的域名和URL,所以一般用于临时的重定向,一般情况下浏览器认为的302重定向是不安全的;302重定向可能会被挟持URL,攻击者会修改302重定向的参数,将网站重定向到色情网站以及钓鱼网站或者诈骗网站,通常情况下在SEO权重里面,用到302重定向的网站会被搜索引擎认为是非法引用用来干扰搜索结果,通常情况下会被降权处罚。Nginx配置301重定向下面修改配置文件 server { #监听80端口 listen 80; #网站虚拟主机名 server_name www.123test.com; #location为访问的目录代理,/为域名后面不需要携带目录名 #假设是/test,那下面的curl测试就需要改成http://www.123test.com/test才可以访问到 location / { #这里使用return 301方式跳转到baidu #301的方式共有三种,这种是比较常用的一种方式 return 301 https://baidu.com; #默认文档,这里可要可不要 index index.html index.htm; } } #测试使用命令 curl http://www.123test.com本次使用域名来自前面文章做实验使用的域名,需要改hosts文件测试截图 Nginx设置302重定向修改配置文件 server { listen 80; server_name www.123test.com; location / { return 302 https://baidu.com; index index.html index.htm; } } #因为302和301的配置文件差不多,配置文件不做解释,直接跳过到下面测试环节使用curl http://www.123test.com测试是否能正常跳转
2022年12月10日
7 阅读
0 评论
0 点赞
2022-12-10
Nginx设置第一个网站
Windows还是Linux下的Nginx配置文件均相同,后期的学习与探究都在CentOS7上完成为方便配置以及增加可阅读性,CentOS安装GNOME桌面,使用桌面版配置Linux下默认的主配置文件在/etc/nginx/nginx.conf网站的配置文件在/etc/nginx/conf.d/*.conf如果是自己编译安装的Nginx,默认的主配置文件目录是根据自己编译安装的位置有关我前面教程编译安装位置/usr/local/nginx/conf/nginx.conf网站配置文件在程序安装目录下面的conf文件夹内为了方便起见,本文使用软件源安装的默认主配置文件位置和默认网站配置文件位置。Linux主配置文件添加索引引用网站配置文件(网站配置文件可以写在Nginx主配置文件下)(如果出现文件写在conf.d文件夹下的配置文件不生效的情况就把网站配置文件写在主配置文件下)user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { #include 为引用conf.d目录下的所有.conf类型引用到Nginx主配置文件下 #如果不知道填写在哪,那就把主配置文件下的所有http参数,仅输入下面参数 include /etc/nginx/conf.d/*.conf; }网站配置文件格式详解server { #监听ipv4的80端口和ipv6的80端口 listen 80; listen [::]:80; #下面一行设置域名,为访问该网站的域名,如果需要本地IP地址访问此网站可以不设置server_name参数 server_name www.123test.com; #root为网站文件存放的位置,需要设置成网站默认文件所在目录的绝对路径 root /www/html/; #设置访问网站默认文件,如果不填那就无法显示网页 index index.html; } #因为默认不存在/www/html目录,所以需要自己手动创建这个目录 cd / && mkdir www && cd /www && mkdir html && chmod 777 html && \ chmod 777 /www && cd /www/html nano index.html #在index.html下面输入 <html> <body> <h1>NO.1</h1> <h2>NO.2</h2> <h3>NO.3</h3> </body> </html> #输入完成index.html文件之后Ctrl+O保存,Ctrl+X退出 #重启Nginx服务器 systemctl restart nginx #需要关闭SELIUX,不然访问会报403错误 nano /etc/selinux/config #将SELINUX=enforcing改成SELINUX=disabled reboot #需要重启生效SELINUX 修改HOSTS文件,以生效server_name参数 nano /etc/hosts #添加下面条目 本机IP domain #我的配置文件 192.168.197.141 www.123test.com #打开终端输入 curl http://www.123test.com 接上代码参数,输入后得出结果
2022年12月10日
5 阅读
0 评论
0 点赞
2022-12-10
安装Nginx
CentOS7 带桌面安装Nginx使用包管理器直接安装Nginx#安装第三方软件源(可以用官方源) yum -y install epel-release #安装Nginx yum -y install nginx #启动Nginx systemctl start nginx编译安装Nginx cd / #下载官网的安装包(当前最新版) wget https://nginx.org/download/nginx-1.23.2.tar.gz #解压 tar -xvf nginx-1.23.2.tar.gz #进入目录 cd nginx-1.23.2 #安装编译需要的软件包 yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel nano #创建Nginx需要的用户和组,等会需要用到 groupadd www useradd -g www www #配置编译参数 ./configure --user=www --group=www \ --prefix=/usr/local/nginx \ --with-http_ssl_module \ --with-http_stub_status_module \ --with-http_realip_module \ --with-threads #编译并安装 make && make install #查看安装版本 /usr/local/nginx/sbin/nginx -V #添加连接,并设置systemctl启动 ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx #设置关键文件 nano /etc/init.d/nginx #填入下方内容 #!/bin/sh # # nginx - this script starts and stops the nginx daemon # # chkconfig: - 85 15 # description: NGINX is an HTTP(S) server, HTTP(S) reverse \ # proxy and IMAP/POP3 proxy server # processname: nginx # config: /usr/local/nginx/conf/nginx.conf # config: /etc/sysconfig/nginx # pidfile: /usr/local/nginx/logs/nginx.pid # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ "$NETWORKING" = "no" ] && exit 0 nginx="/usr/local/nginx/sbin/nginx" prog=$(basename $nginx) NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf" [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx lockfile=/var/lock/subsys/nginx make_dirs() { # make required directories user=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -` if [ -z "`grep $user /etc/passwd`" ]; then useradd -M -s /bin/nologin $user fi options=`$nginx -V 2>&1 | grep 'configure arguments:'` for opt in $options; do if [ `echo $opt | grep '.*-temp-path'` ]; then value=`echo $opt | cut -d "=" -f 2` if [ ! -d "$value" ]; then # echo "creating" $value mkdir -p $value && chown -R $user $value fi fi done } start() { [ -x $nginx ] || exit 5 [ -f $NGINX_CONF_FILE ] || exit 6 make_dirs echo -n $"Starting $prog: " daemon $nginx -c $NGINX_CONF_FILE retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval } stop() { echo -n $"Stopping $prog: " killproc $prog -QUIT retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval } restart() { configtest || return $? stop sleep 1 start } reload() { configtest || return $? echo -n $"Reloading $prog: " killproc $nginx -HUP RETVAL=$? echo } force_reload() { restart } configtest() { $nginx -t -c $NGINX_CONF_FILE } rh_status() { status $prog } rh_status_q() { rh_status >/dev/null 2>&1 } case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart|configtest) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" exit 2 esac #输完之后给这个文件上执行权限 chmod a+x /etc/init.d/nginx #把Nginx加入到chkconfig管理列表里面 chkconfig --add /etc/init.d/nginx chkconfig nginx on #启动服务 systemctl start nginx #设置开机自启 systemctl enable nginx #查看服务状态 systemctl status nginx #打开浏览器查看能不能访问Nginx的默认页 #浏览器输入localhost:80 Windows 下安装Nginx下载Nginx For Windows 下载后解压安装包,启动Nginx打开浏览器输入localhost查看默认页
2022年12月10日
11 阅读
0 评论
0 点赞
2022-12-10
Nginx概述
Nginx是一个HTTP和反向代理服务器,邮件代理服务器以及第四层流量(TCP/UDP)代理服务器。Nginx的优点 可以高并发连接;官方测试Nginx可以单服务端支撑5万多连接,在实际的生产环境中可以支撑2-4万并发连接数。 Nginx是个高性能的Web服务器,反向代理服务器,Nginx足够轻量,对比Apache来说,Nginx使用的硬件资源足够低,配合FastCGI(Nginx+PHP)的情况下,当前3万个并发连接下,Nginx消耗的内存不足300MB,加上64个进程的PHP-CGI(每个CGI消耗20MB的内存)消耗1280MB,整个Web服务消耗1.5GB左右的内存; 使用Nginx的国际大厂 Netfix网站服务器截图 Bilibili网站服务器截图(Tengine是阿里巴巴自己基于Nginx二次编译给淘宝和天猫应对双十一的优化版) Nginx的架构 nginx工作(worker)码包括核心和功能模块。 nginx的核心是负责维护严格的运行循环,并在请求处理的每个阶段执行模块代码的适当部分。 模块构成了大部分的演示和应用层功能。 模块读取和写入网络和存储,转换内容,执行出站过滤,应用服务器端包含操作,并在代理启动时将请求传递给上游服务器。nginx的模块化架构通常允许开发人员扩展一组Web服务器功能,而无需修改nginx内核。 nginx模块略有不同,即核心模块,事件模块,阶段处理程序,协议,可变处理程序,过滤器,上游和负载平衡器。nginx不支持动态加载的模块; 即在构建阶段将模块与核心一起编译。在处理与接受,处理和管理网络连接和内容检索相关的各种操作时,nginx在基于Linux,Solaris和BSD的操作系统中使用事件通知机制和一些磁盘I/O性能增强,如:kqueue,epoll, 和事件端口。 目标是为操作系统提供尽可能多的提示,以便及时获取入站和出站流量,磁盘操作,读取或写入套接字,超时等异步反馈。 对于每个基于Unix的nginx运行的操作系统,大量优化了复用和高级I/O操作的不同方法的使用。nginx架构的概述如下图所示 (来自网络)
2022年12月10日
4 阅读
0 评论
0 点赞