Nginx网站服务的搭建和优化、重写跳转

news/2024/5/20 17:18:59/文章来源:https://blog.csdn.net/weixin_66946305/article/details/125034381

1.Nginx简介

1.概况

Nginx:

  • Nginx是一个高性能的HTTP和反向代理服务器
  • 是一款轻量级的高性能的web服务器/反向代理服务器/电子邮件(IMAP/POP3)代理服务器
  • 单台物理服务器可支持30 000~50 000个并发请求(实际上20000-30000)
    Apache
  • Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适用于多处理器环境,因此,在一个apache Web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器

2.Nginx和Apache的优缺点比较

1)nginx相对于apache的优点∶

  • 轻量级,同样起web服务,比apache占用更少的内存及资源

  • 抗并发,nginx处理请求是异步非阻塞的,而apache是阻塞型的在高并发下,nginx能保持低资源低消耗高性能

  • 高度模块化的设计,编写模块相对简

(2)apache相对于nginx的优点∶

  • Rewrite比nginx的rewrite强大 (rewrite的主要功能就是实现统一资源定位符URL的跳转)

  • 模块多,基本想到的都可以找到

  • 少bug, nginx的bug相对较多

  • 超稳定
    存在的理由:一般来说,需要性能的web服务,用nginx。若不需要性能只求稳定,就选用apache。

Nginx作为web服务器与Apache比较

  • apache是同步多进程模型,一个连接对应一个进程,nginx是异步的,多个连接可以对应一个进程。

  • Nginx处理静态文件好,耗费内存少,只适合静态和反向。

  • Apache在处理动态有优势

  • nginx并发性比较好,CPU占用内存低,如果rewrite频繁,选用apache最佳。

  • 总的来说,apache依然是大部分公司的首选。

Nginx的优点:

●工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构。Nginx正则规则比HAProxy更为强大和灵活。
●Nginx对网络稳定性的依赖非常小,理论上能ping通就就能进行负载功能,LVS对网络稳定性依赖比较大,稳定要求相对更高。
●Nginx安装和配置、测试比较简单、方便,有清晰的日志用于排查和管理,LVS的配置、测试就要花比较长的时间了。
●可以承担高负载压力且稳定,一般能支撑几万次的并发量,负载度比LVS相对小些。
●Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等。
●Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器。
●Nginx作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,很多场景下都将其作为反向代理加速器。
●Nginx作为静态网页和图片服务器,这方面的性能非常优秀,同时第三方模块也很多。

Nginx的缺点:
●Nginx仅能支持http、https和Email协议,这样就在适用范围上面小些。
●对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测。
●不支持Session的直接保持,需要通过ip_hash和cookie的引导来解决。

认识Nginz服务的主配置文件nginx.conf

1、全局块:全局配置,对全局生效;
2、events块:配置影响Nginx 服务器与用户的网络连接;
3、http块:配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置;
4、server块:配置虚拟主机的相关参数,一个http 块中可以有多个server块;5、location块:用于配置匹配的uri ;
6、upstream:配置后端服务器具体地址,负载均衡配置不可或缺的部分。

I/O事件配置

在这里插入图片描述

  • 如提高每个进程的连接数还需执行"ulimit -n 65535"命令临时修改本地每个进程可以同时打开的最大文件数。
    :在Linux平台上,在进行高并发rcP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TOP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。

  • 可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制。

  • epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用no接口select/pol1的增强版本,它能显著的减少程序在大量并发连按中只有少量活跃的情况下的系统CPU利用率。

  • 同步/异步:关注的是消息通信机制,即调用者在等待一件事情的处理结果时,被调用者是否提供完成状态的通知。

  • 同步: synchronous,被调用者并不提供事件的处理结果相关的通知消息,需要调用者主动询问事情是否处理完成

  • 异步: asynchronous,被调用者通过状态、通知或回调机制主动通知调用者被调用者的运行状态

nginx函数
#源码编译安装Nginx服务
install_nginx(){
#1、安装依赖包
yum -y install pcre-devel zlib-devel make
#2、创建运行用户
useradd -M -s /sbin/nologin nginx
#3、编译安装
tar xf /opt/nginx-1.12.0.tar.gz -C /opt/cd /opt/nginx-1.12.0/./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_modulemake -j 4 && make install
#4、优化路径
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
#5、添加 Nginx 系统服务
cat > /lib/systemd/system/nginx.service <<EOF
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
#6.授予权限
chmod 754 /lib/systemd/system/nginx.service
#开启服务
systemctl enable --now nginx.service
}

常用的Nginx 正则表达式

^匹配输入字符串的起始位置
$匹配输入字符串的结束位置
*匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”
+匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“olll”,但不能匹配“o”
?匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,”?”等效于”{0,1}”
.匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,请使用诸如“[.\n]”之类的模式
\将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\n”匹配一个换行符,而“$”则匹配“$”
\d匹配纯数字[0-9]
\s空白符
\w任意单词字符包括下划线[A-Za-z0-9_]
{n}重复 n 次
{n,}重复 n 次或更多次
{n,m}重复 n 到 m 次
[]定义匹配的字符范围
[c]匹配单个字符 c
[a-z]匹配 a-z 小写字母的任意一个
[a-zA-Z0-9]匹配所有大小写字母或数字
()表达式的开始和结束位置
|或运算符

从功能看 rewrite 和 location 似乎有点像,都能实现跳转,主要区别在于 rewrite 是在同一域名内更改获取资源的路径,而 location 是对一类路径做控制访问或反向代理,还可以proxy_pass 到其他机器。

rewrite 对访问的域名或者域名内的URL路径地址重写
location 对访问的路径做访问控制或者代理转发

location 的分类和常见的匹配规则

location 大致可以分为三类:

类别公式
精准匹配location = / {…}
一般匹配location / {…}
正则匹配location ~ / {…}

location 常用的匹配规则:

=进行普通字符精确匹配,也就是完全匹配。
^~表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其它 location。
~区分大小写的匹配。
~*不区分大小写的匹配。
!~区分大小写的匹配取非。
!~*不区分大小写的匹配取非。

location 优先级:

首先精确匹配 =
其次前缀匹配 ^~
其次是按文件中顺序的正则匹配 ~或~*
然后匹配不带任何修饰的前缀匹配
最后是交给 / 通用匹配

nginx.conf内部配置及规则解析

#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;    ##默认文件类型server_tokens off;           ##不支持文件发送(下载)##此选项允许或禁止使用socket的TCP cORK的选项(发送数据包前先缓存数据),此选项仅在使用sendfile的时候使用upstream tomcat_server {server 172.16.10.10:8080 weight=1;server 172.16.10.20:8080 weight=1;}#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;sendfile        on;#tcp_nopush     on;
##连接保持超时时间,单位是秒#keepalive_timeout  0;##指定KeepAlive的超时时间(timeout)。指定每个TCP连接最多可以保持多长时间,服务器将会在这个时间后关闭连接。 Nginx的默认值是65秒,有些浏览器最多只保持 60 秒,所以可以设定为 60 秒。若将它设置为0,就禁止了keepalive 连接。
第二个参数(可选的)指定了在响应头Keep-Alive:timeout=time中的time值。这个头能够让一些浏览器主动关闭连接,这样服务器就不必去关闭连接了。没有这个参数,Nginx 不会发送 Keep-Alive 响应头。keepalive_timeout  65;#gzip  on;              ##gzip模块设置,设置是否开启gzip压缩输出server {listen       80;					##监听地址及端口server_name  www.benet.com;			##站点域名,可以有多个,用空格隔开location ~ .*\.php$ {      ##一切以.php结尾的链接rewrite ^/(.*) http://www.kgc.com/$1 permanent;      ##重写成该链接}location ~* .*\.(jpg|jpeg)$ {    加入新的 location,以图片后缀为jpg或jpeg结尾作为缓存对象root /var/www/html;      #文件存放位置expires 1d;                   #指定缓存时间,1天}location ~* .*\.(jpg|jpeg)$ {                 #加入新的 location,以图片后缀为jpg或jpeg结尾作为缓存对象valid_referers *.benet.com benet.com;   #valid_referers :设置信任的网站,可以正常使用图片if ($invalid_referer) {       #添加if语句判断当上一条命令成功则不会,则不会进入这个命令,若上一条命令不成功,则进行跳转。rewrite ^/ http://www.benet.com/xiaosi.png;   #上一条命令成功跳转}}location ~ .*\.jsp {proxy_pass http://tomcat_server;     ##转发proxy_set_header HOST $host;        #这一行的作用是把原http请求的Header中的Host字段也放到转发的请求里proxy_set_header X-Real-IP $remote_addr;##将$remote_addr的值放进变量X-Real-IP中proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;##请求封装报文}location / {root /var/www/html;index index.html;}}server {listen       80;server_name  www.kgc.com;#charset koi8-r;#access_log  logs/host.access.log  main;location = /index.php {rewrite (.+) http://www.kgc.com/bbs/index.php permanent;}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$ {root           html;fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$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;#}}

日志优化:

vim /opt/fenge.sh
#!/bin/bash
\# Filename: fenge.sh
day=$(date -d "-1 day" "+%Y%m%d")											#显示前一天的时间
logs_path="/var/log/nginx"
pid_path="/usr/local/nginx/logs/nginx.pid"
[ -d $logs_path ] || mkdir -p $logs_path 									#创建日志文件目录
mv /usr/local/nginx/logs/access.log ${logs_path}/kgc.com-access.log-$day	#移动并重命名日志文件
kill -USR1 $(cat $pid_path)													#重建新日志文件
find $logs_path -mtime +30 -exec rm -rf {} \;								#删除30天之前的日志文件
#find $logs_path -mtime +30 | xargs rm -rf chmod +x /opt/fenge.sh
/opt/fenge.sh
ls /var/log/nginx
ls /usr/local/nginx/logs/access.log crontab -e
0 1 * * * /opt/fenge.sh
```

连接超时优化

HTTP有一个KeepAlive模式,它告诉web服务器在处理完一个请求后保持这个TCP连接的打开状态。若接收到来自同一客户端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。
KeepAlive 在一段时间内保持打开状态,它们会在这段时间内占用资源。占用过多就会影响性能。vim /usr/local/nginx/conf/nginx.conf
http {
...... keepalive_timeout 65 180;client_header_timeout 80;client_body_timeout 80;
...... 
}systemctl restart nginx

keepalive_timeout
指定KeepAlive的超时时间(timeout)。指定每个TCP连接最多可以保持多长时间,服务器将会在这个时间后关闭连接。 Nginx的默认值是65秒,有些浏览器最多只保持 60 秒,所以可以设定为 60 秒。若将它设置为0,就禁止了keepalive 连接。
第二个参数(可选的)指定了在响应头Keep-Alive:timeout=time中的time值。这个头能够让一些浏览器主动关闭连接,这样服务器就不必去关闭连接了。没有这个参数,Nginx 不会发送 Keep-Alive 响应头。

client_header_timeout
客户端向服务端发送一个完整的 request header 的超时时间。如果客户端在指定时间内没有发送一个完整的 request header,Nginx 返回 HTTP 408(Request Timed Out)。

client_body_timeout
指定客户端与服务端建立连接后发送 request body 的超时时间。如果客户端在指定时间内没有发送任何内容,Nginx 返回 HTTP 408(Request Timed Out)。

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

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

相关文章

山寨网站正确的做法

下了网站的源码&#xff0c;结果有问题&#xff0c;短时间调试无果&#xff0c;试了各种网站下载器&#xff0c;下载的网站不能看。最后&#xff0c;决定手动来。 思路&#xff1a;一个网页一个网页的扒 工具&#xff1a;火狐浏览器、迅雷、一个新建的文本、PHPStorm9、PHPStud…

网站二级域名与一级目录的选择

读者问: 很多人都说子站包围主站会很有利,想问一下关于子站的问题 子站(二级域名)相对于网站的一级目录来说,权威性是不是要大些? 搜索引擎是把子站作为独立的一个站来看待?还是也算为一级目录来看待? 如果是作为独立的一个站来看待,那主站的内容就少了,那流量会算进主站吗?…

使用Display: None来隐藏内容是合法的SEO吗?

如果你正在优化一个有上千页面的网站&#xff0c;那么你很有可能同一个CMS系统在打交道。但是&#xff0c;CMS系统经常会带来很多搜索引擎优化问题。如果CMS的开发者不熟悉搜索引擎工作原理的话&#xff0c;即使他们本来没有打算欺骗搜索引擎&#xff0c;但最终的结果还是会导致…

Web发展简史((webapp+Java原生)移动端开发 )+web网站)

Web发展简史--------->(&#xff08;webappJava原生&#xff09;移动端开发(微信小程序&#xff0c;公众号&#xff0c;头条app))web网站) Web发展简史 1&#xff1a;在那时&#xff0c;Web开发还比较简单&#xff0c;开发者经常会去操作web服务器(主要还是他自己的机器)&…

购买云服务器和搭建PHP环境,运行PHP个人网站

1&#xff1a;首先需要购买云服务器 阿里云&#xff0c;百度云&#xff0c;腾讯云&#xff0c;华为云等那一家的都一样。我以腾讯云为例子说明&#xff0c;我买的是腾讯云。 1&#xff1a;本人学生&#xff0c;直接购买腾讯云10元一月的学生服务器。购买前需要先注册腾讯云的账…

sun.com跳转到oracle.com,sun网站logo变更

今天准备下载最新版本的jdk时,发现sun网站logo已经改为oracle, 色调风格也与oracle一致。 http://java.sun.com/j2se: jdk下载页面: sun.com 跳转至oracle 怀念一下原来的sun页面:

叉包舍-虚拟网之L2TP组网用户访问内部网站故障分析处理

一、问题描述 L2tp组网用户反映&#xff0c;无法打开其内网的一个网站&#xff0c;地址为172.20.252.8&#xff0c;但可以打开其他网站&#xff0c;如&#xff1a;172.20.12.131&#xff1b; 二、组网拓扑 用户接入―交换机---城域网ERX&#xff08;LAC&#xff09; -----Eudem…

在线教育网站数据分析——搭建指标体系

接触了很多的在线教育的客户之后发现&#xff0c;在线这个领域市场竞争已经呈现白热化的态势。在线教育的品牌方数字化发展没那么快&#xff0c;但是他们都意识到了互联网战场必须占领&#xff0c;所以医疗和在线教育每年在线上投入的营销费用很高&#xff0c;一个中型的公司&a…

python3+beautifulSoup4.6抓取某网站小说(二)基础功能设计

本章学习内容&#xff1a;1、网页编码还原读取2、功能设计 stuep1:网页编码还原读取 本次抓取对象&#xff1a; http://www.cuiweijuxs.com/jingpinxiaoshuo/按照第一篇的代码来进行抓取&#xff1a; # -*- coding: UTF-8 -*- from urllib import requestif __name__ "__…

python3+beautifulSoup4.6抓取某网站小说(三)网页分析,BeautifulSoup解析

本章学习内容&#xff1a;将网站上的小说都爬下来&#xff0c;存储到本地。 目标网站&#xff1a;www.cuiweijuxs.com 分析页面&#xff0c;发现一共4步&#xff1a;从主页进入分版打开分页列表、打开分页下所有链接、打开作品页面、打开单章内容。 所以实现步骤如下&#xff1…

python3+beautifulSoup4.6抓取某网站小说(四)多线程抓取

上一篇多文章&#xff0c;是二级目录&#xff0c;根目录“小说”&#xff0c;二级目录“作品名称”&#xff0c;之后就是小说文件。 本篇改造了部分代码&#xff0c;将目录设置为根目录->作者目录->作品目录->作品章节.txt. 但这并不是本章内容当重点&#xff0c;重点…

个人建站mac下安装hexo

title: 个人建站&mac下安装hexo date: 2018-04-18 16:34:02 tags: [mac,blog,个人建站,markdown] --- 这两天使用了markdown来写文章&#xff0c;发觉甚是好用。条理清晰&#xff0c;排版清爽。so&#xff0c;萌生了使用支持markdown的hexo来进行个人建站。 setup 1 安装no…

网站开发规范及流程v1.5

Web 开发的分散性和交互性&#xff0c;决定了 Web 开发必须遵从一定的开发规范和技术约定&#xff0c;只有每个开发人员都按照一个共同的规范去设计、沟通、开发、测试、部署&#xff0c;才能保证整个开发团队协调一致的工作&#xff0c;从而提高开发工作效率&#xff0c;提升工…

漫谈网站开发规范

任何一个项目或者系统开发之前都需要定制一个开发约定和规则&#xff0c;这样有利于项目的整体风格统一、代码维护和扩展。由于Web项目开发的分散性、独立性、整合的交互性等&#xff0c;所以定制一套完整的约定和规则显得尤为重要。本文档将定制一系列约定和规则&#xff0c;他…

很多php网站的详细页点进去都是html,请问怎么做到的?

主  题&#xff1a;很多php网站的详细页点进去都是html&#xff0c;请问怎么做到的&#xff1f; 作  者&#xff1a;gaosj (我很想做程序员啊) 等  级&#xff1a; 信 誉 值&#xff1a;100 所属社区&#xff1a;Web 开发 PHP 问题点数&#xff1a;100 回复次数&#xff…

阿里云CentosJDK安装,Tomact环境搭建网页建站

文章目录 前言一、JDK是什么&#xff1f;二、JDK环境安装步骤1.安装jdk环境2.创建目录可以参考Centos基本命令&#xff08;点击跳转&#xff09;Linux vi/vim | 菜鸟教程 &#xff08;点击跳转&#xff09;vi命令详解 &#xff08;点击跳转&#xff09; 3、安装JDK3、设置环境变…

apache2添加网站配置

1.进入etc目录下的apache2文件夹&#xff0c;然后进入sites-available文件&#xff0c;然后把000那个文件用记事本打开&#xff0c;复制里面内容&#xff0c;新建一个文件&#xff0c;把内容复制到里面去。&#xff08;注意命名&#xff09; 2.然后进入服务器&#xff0c;进入a…

手机访问电脑的本地网站或者服务器

最近开始转向移动开发方向&#xff0c;因此对于一个移动开发的前端来说&#xff0c;使用各种真机来进行自己网站或者系统的界面进行针对性的调试就显的尤为重要了。因此&#xff0c;会经常通过电脑开启一个wifi来供手机进行连接&#xff0c;形成一个小的局域网&#xff0c;然后…

网站后台添加富文本编辑器

网站后台需要添加富文本编辑器&#xff0c;偶然的机会发现了百度的UEditor&#xff0c;经过一番配置&#xff08;我使用的环境是struts2hibernatespring&#xff09;&#xff0c;终于是成功了&#xff0c;下面来记录一下配置的过程&#xff1a; step1:首先去UEditor官网下载UE…