求助:独立主机nignx静态服务器配置如何配置静态化

Nginx服务器安装配置及设置反向代理
在正式开始安装之前,先说明一下这次的实验环境,实验环境如下:
&Linux主机:
&& IP地址:10.3.198.198
子网掩码:255.255.255.0
&& 默认网关:10.3.198.1
Windows主机:
IP地址:10.3.216.247
子网掩码:255.255.255.0
&&&&&&&&&&默认网关:10.3.216.1
两台主机的IP地址同属于一个A类的私有网段内。
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。你真的了解如何将 Nginx 配置为Web服务器吗 - ThinkPHP框架
你真的了解如何将 Nginx 配置为Web服务器吗阅读之前,建议先阅读初识 Nginx。 之后,我们来了解一下 Nginx 配置。
抽象来说,将 Nginx 配置为 Web 服务器就是定义处理哪些 URLS 和如何处理这些URLS 对应的请求。具体来说,就是定义一些虚拟服务器(Virtual Servers),控制具有特定 IP 和域名的请求。
更具体的来说, Nginx 通过定义一系列 locations 来控制对 URIS 的选择。每一个 location 定义了对映射到自己的请求的处理场景:返回一个文件或者代理请求,或者根据不同的错误代码返回不同的错误页面。另外,根据 URI 的不同,请求也可以被重定向到其它 server 或者 location 。
设置虚拟服务器
Nginx 配置文件至少包含一个 server 命令 ,用来定义虚拟服务器。当请求到来时, Nginx 会首先选择一个虚拟服务器来处理该请求。
虚拟服务器定义在 http 上下文中的 server 中:
http { server { # Server configuration
注意: http 中可以定义多个 server
server 配置块使用 listen 命令监听本机 IP 和端口号(包括 Unix domain socket and path),支持 IPv4、IPv6,IPv6地址需要用方括号括起来:
server { listen 127.0.0.1:8080; # IPv4地址,8080端口
# listen [:10F:1A:121B:0:0:10]:80; # IPv6地址,80端口
# listen [::]:80; # 听本机的所有IPv4与IPv6地址,80端口
# The rest of server configuration}
上述配置,如果不写端口号,默认使用80端口,如果不写 IP ,则监听本机所有 IP。
server_name:
如果多个 server 的 listen IP 和端口号一模一样, Nginx 通过请求头中的 Host
你真的了解如何将 Nginx 配置为Web服务器吗
与 server_name 定义的主机名进行比较,来选择合适的虚拟服务器处理请求:
server { listen 80;
server_name lufficc.com www.lufficc.
server_name 的参数可以为:
完整的主机名,如:api.lufficc.com 。
含有通配符(含有 *),如:*.lufficc.com 或 api.* 。
正则表达式,以 ~ 开头。
通配符只能在开头或结尾,而且只能与一个 . 相邻。www.*.example.org 和 w*.example.org均无效。 但是,可以使用正则表达式匹配这些名称,例如 ~^www\..+\.example\.org$ 和~^w.*\.example\.org$ 。 而且 * 可以匹配多个部分。 名称 * .example.org 不仅匹配www.example.org,还匹配www.sub.example.org。
对于正则表达式:Nginx 使用的正则表达式与 Perl 编程语言(PCRE)使用的正则表达式兼容。 要使用正则表达式,且必须以 ~ 开头。
命名的正则表达式可以捕获变量,然后使用:
server { server_name ~^(www\.)?(?&domain&.+)$; location / { root /sites/$
小括号 () 之间匹配的内容,也可以在后面通过 $1 来引用,$2 表示的是前面第二个 () 里的内容。因此上述内容也可写为:
server { server_name ~^(www\.)?(.+)$; location / { root /sites/$2;
一个 server_name 示例:
server { listen 80;
server_name api.lufficc.com *.lufficc.
同样,如果多个名称匹配 Host 头部, Nginx 采用下列顺序选择:
完整的主机名,如 api.lufficc.com。
最长的,且以 * 开头的通配名,如:*.lufficc.com。
最长的,且以 * 结尾的通配名,如:api.* 。
第一个匹配的正则表达式。(按照配置文件中的顺序)
即优先级:api.lufficc.com & *.lufficc.com & api.* & 正则。
如果 Host 头部不匹配任何一个 server_name ,Nginx 将请求路由到默认虚拟服务器。默认虚拟服务器是指:nginx.conf 文件中第一个 server 或者 显式用 default_server 声明:
server { listen 80 default_
配置 location
URI 与 location 参数的匹配
当选择好 server 之后,Nginx 会根据 URIs 选择合适的 location 来决定代理请求或者返回文件。
location 指令接受两种类型的参数:
前缀字符串(路径名称)
正则表达式
对于前缀字符串参数, URIs 必须严格的以它开头。例如对于 /some/path/ 参数,可以匹配/some/path/document.html ,但是不匹配 /my-site/some/path,因为 /my-site/some/path 不以/some/path/ 开头。
location /some/path/ {
对于正则表达式,以 ~ 开头表示大小写敏感,以 ~* 开头表示大小写不敏感。注意路径中的 . 要写成 \. 。例如一个匹配以 .html 或者 .htm 结尾的 URI 的 location:
location ~ \.html? {
正则表达式的优先级大于前缀字符串。如果找到匹配的前缀字符串,仍继续搜索正则表达式,但如果前缀字符串以 ^~ 开头,则不再检查正则表达式。
具体的搜索匹配流程如下:
将 URI 与所有的前缀字符串进行比较。
= 修饰符表明 URI 必须与前缀字符串相等(不是开始,而是相等),如果找到,则搜索停止。
如果找到的最长前缀匹配字符串以 ^~ 开头,则不再搜索正则表达式是否匹配。
存储匹配的最长前缀字符串。
测试对比 URI 与正则表达式。
找到第一个匹配的正则表达式后停止。
如果没有正则表达式匹配,使用 4 存储的前缀字符串对应的 location。
= 修饰符拥有最高的优先级。如网站首页访问频繁,我们可以专门定义一个 location 来减少搜索匹配次数(因为搜索到 = 修饰的匹配的 location 将停止搜索),提高速度:
location = / {
静态文件和代理
location 也定义了如何处理匹配的请求:返回静态文件 或者 交给代理服务器处理。下面的例子中,第一个 location 返回 /data 目录中的静态文件,第二个 location 则将请求传递给https://lufficc.com 域名的服务器处理:
server { location /images/ { root /
} location / { proxy_pass https://lufficc.
root 指令定义了静态文件的根目录,并且和 URI 拼接形成最终的本地文件路径。如请求/images/example.png,则拼接后返回本地服务器文件 /data/images/example.png 。
proxy_pass 指令将请求传递到 URL 指向的代理服务器。让后将来自代理服务器的响应转发给客户端。 在上面的示例中,所有不以 /images / 开头的 URI 的请求都将传递给代理服务器处理。
比如我把 proxy_pass 设置为 https://www.baidu.com/,那么访问 http://search.lufficc.com/ 将得到百度首页一样的响应(页面)(感兴趣的童鞋可以自己试一试搜索功能,和百度没差别呢):
listen 80;
server_name search.lufficc.
location / {
proxy_pass https://www.baidu.
使用变量(Variables)
你可以使用变量来使 Nginx 在不同的请求下采用不同的处理方式。变量是在运行时计算的,用作指令的参数。 变量由 $ 开头的符号表示。 变量基于 Nginx 的状态定义信息,例如当前处理的请求的属性。
有很多预定义变量,例如核心的 HTTP 变量,你也可以使用 set,map 和 geo 指令定义自定义变量。 大多数变量在运行时计算,并包含与特定请求相关的信息。 例如,$remote_addr 包含客户端 IP 地址,$uri 保存当前URI值。
一些常用的变量如下:
变量名称 作用
$uri 请求中的当前URI(不带请求参数),它可以通过内部重定向,或者使用index指令进行修改,$uri不包含主机名,如 /foo/bar.html。
$arg_name 请求中的的参数名,即“?”后面的arg_name=arg_value形式的arg_name
$hostname 主机名
$args 请求中的参数值
$query_string 同 $args
$request 代表客户端的请求地址
$request_uri 这个变量等于包含一些客户端请求参数的原始URI,它无法修改,不包含主机名,如:/cnphp/test.php?arg=freemouse。
一个简单的应用就是从 http 重定向到 https 时带上路径信息:
... return 301 https://lufficc.com$request_
返回特定状态码
如果你的网站上的一些资源永久移除了,最快最简洁的方法就是使用 return 指令直接返回:
location /wrong/url { return 404;
return 的第一个参数是响应代码。可选的第二个参数可以是重定向(对应于代码301,302,303和307)的 URL 或在响应正文中返回的文本。 例如:
location /permanently/moved/url { return 301 http://www.example.com/moved/
return 指令可以包含在 location 和 server 上下文中:
location / { return 404;
... return 404;
location / {
error_page 命令可以配置特定错误码的错误页面,或者重定向到其他的页面。下面的示例将在 404 错误发生时返回 /404.html 页面。
error_page 404 /404.
error_page 命令定义了如何处理错误,因此不会直接返回,而 return 确实会立即返回。当代理服务器或者 Nginx 处理时产生相应的错误的代码,均会返回相应的错误页面。
在下面的示例中,当 Nginx 找不到页面时,它将使用代码301替换代码404,并将客户端重定向到http://example.com/new/path.html 。 此配置很有用,比如当客户端仍尝试用旧的 URI 访问页面时,301代码通知浏览器页面已永久移除,并且需要自动替换为返回的新地址。
location /old/path.html { error_page 404 =301 http:/example.com/new/path.
rewrite 指令可以多次修改请求的 URI。rewrite 的第一个参数是 URI需要匹配的正则表达式,第二个参数是将要替换的 URI。第三个参数可选,指示是否继续可以重写或者返回重定向代码(301或302)。例如:
location /users/ { rewrite ^/users/(.*)$ /show?user=$1
您可以在 server 和 location 上下文中包括多个 rewrite 指令。 Nginx 按照它们发生的顺序一个一个地执行指令。 当选择 server 时,server 中的 rewrite 指令将执行一次。
在 Nginx 处理一组 rewrite 指令之后,它根据新的 URI 选择 location 。 如果所选 location 仍旧包含 rewrite 指令,它们将依次执行。 如果 URI 匹配所有,则在处理完所有定义的 rewrite 指令后,搜索新的 location 。
以下示例将 rewrite 指令与 return 指令结合使用:
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3
rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2. return 403;
诸如 /download/some/media/file 的 URI 被改为 /download/some/mp3/file.mp3 。 由于 last 标志,后续指令(第二个 rewrite 指令和 return 指令)被跳过,但 Nginx 继续以更改后的 URI 处理请求。 类似地,诸如 /download/some/audio/file 的 URI 被替换为/download/some/mp3/file.ra。 如果 URI 不匹配 rewrite 指令,Nginx 将403 错误代码返回给客户端。
last 与 break的区别是:
last : 在当前 server 或 location 上下文中停止执行 rewrite 指令,但是 Nginx 继续搜索与重写的URI匹配的 location,并应用新 location 中的任何 rewrite 指令(这意味着 URI 可能再次改变)。
break :停止当前上下文中 rewrite 指令的处理,并取消搜索与新 URI 匹配的 location。 不会执行新 location中的 rewrite 指令。
. : 匹配除换行符以外的任意字符
? : 重复0次或1次
+ : 重复1次或更多次
*: 重复0次或更多次
\d :匹配数字
^ : 匹配字符串的开始
$ : 匹配字符串的介绍
{n} : 重复n次
{n,} : 重复n次或更多次
[c] : 匹配单个字符c
[a-z]: 匹配a-z小写字母的任意一个
$args : #这个变量等于请求行中的参数,同$query_string
$content_length : 请求头中的Content-length字段。
$content_type : 请求头中的Content-Type字段。
$document_root : 当前请求在root指令中指定的值。
$host : 请求主机头字段,否则为服务器名称。
$http_user_agent : 客户端agent信息
$http_cookie : 客户端cookie信息
$limit_rate : 这个变量可以限制连接速率。
$request_method : 客户端请求的动作,通常为GET或POST。
$remote_addr : 客户端的IP地址。
$remote_port : 客户端的端口。
$remote_user : 已经经过Auth Basic Module验证的用户名。
$request_filename : 当前请求的文件路径,由root或alias指令与URI请求生成。
$scheme : HTTP方法(如http,https)。
$server_protocol : 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$server_addr : 服务器地址,在完成一次系统调用后可以确定这个值。
$server_name : 服务器名称。
$server_port : 请求到达服务器的端口号。
$request_uri : 包含请求参数的原始URI,不包含主机名,如:/foo/bar.php?arg=baz。
$uri : 不带请求参数的当前URI,$uri不包含主机名,如/foo/bar.html。
$document_uri : 与$uri相同。
例如请求:http://localhost:88/test1/test2/test.php
$host:localhost
$server_port:88
$request_uri:http://localhost:88/test1/test2/test.php
$document_uri:/test1/test2/test.php
$document_root:/var/www/html
$request_filename:/var/www/html/test1/test2/test.php
积分:1833
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。使用Nginx搭建WEB服务器
<span type="1" blog_id="1290292" userid='
分享到朋友圈
好的文章,和好友一起分享时间: 17:43:51&&
服务器软件nginx 1.8.0
操作系统:Centos 7 64bit
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-
一、准备篇
1、先新建screen,以免编译中断
2、添加用户组
/usr/sbin/groupadd -/usr/sbin/useradd -g www www
查看所有用户组和用户命令
cat /etc/group
文件包含所有组
cat /etc/shadow或者cat /etc/passwd
系统存在的所有用户名
3、更新系统,安装必要的编译工具、依赖包、工具
yum -y update
yum -y install gcc gcc-c++ autoconf automake& zlib zlib-devel openssl openssl-devel pcre-devel zip unzip net-snmp snmp-mibs-utils vsftp
二、nginx及模块安装篇
1、下载nginx第三方防盗链模块Nginx-accesskey、nginx服务器并解压
mkdir /DLcd /DLserver
wget http://wiki.nginx.org/images/5/51/Nginx-accesskey-2.0.3.tar.tar -xzvf Nginx-accesskey-2.0.3.tar.rm -f Nginx-accesskey-2.0.3.tar.gz
编辑nginx-accesskey的配置文件config
vi nginx-accesskey-2.0.3/config
vim切换成insert模式,将$HTTP_ACCESSKEY_MODULE修改为ngx_http_accesskey_module
保存并退出vim编辑
2、安装Nginx-limit-traffic-rate-module
wget https://github.com/bigplum/Nginx-limit-traffic-rate-module/archive/master.unzip master.rm -f master.zip
第三方限速模块nginx Nginx-limit-traffic-rate-module
项目地址:https://github.com/bigplum/Nginx-limit-traffic-rate-module
该模块是按来路IP限制速度,而不是按连接限制,以下配置暂时按后者方式设置,该方式有弊端即同一IP有多人连接时(例如共用一个共享出口ip),速度被限制(例如我开的限制连接数为每个ip 1个连接,这不科学。。。。,但如果把连接数调大,又无法限制迅雷等多线下载器,故而有必要启用按)
按连接来控制下载速度的模块nginx默认已经安装
ngx_http_limit_conn_module
ngx_http_limit_req_module
若作为专门的图片服务器还可以使用ngx_http_image_filter_module限制图片大小
若需要开启http上传功能,需要使用Nginx upload module 官方文档: http://www.grid.net.ru/nginx/upload.en.html
备注:官方的版本编译出错,使用github上的
3、安装Nginx upload module 上传模块
wget https://github.com/vkholodkov/nginx-upload-module/archive/2.2.unzip 2.2.rm -f 2.2.zip
配置参考http://www.ttlsa.com/nginx/nginx-modules-upload-module/
安装方法:
添加以下参数然后编译
--add-module=/DLserver/nginx-upload-module-2.2 --with-http_secure_link_module
(:该模块编译失败,暂时未处理)
4、编译安装nginx
下载nginx服务器并解压进入目录
wget http://nginx.org/download/nginx-1.8.0.tar.tar -xzvf nginx-1.8.0.tar.rm -f nginx-1.8.0.tar.cd nginx-1.8.0
由于是作为纯静态文件的下载服务器,所以可以在编译时去掉不必要的模块
编译参数如下:
./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --user=www --group=www --without-http_fastcgi_module --without-http_autoindex_module --without-http_ssi_module --without-http_memcached_module --without-http_scgi_module --without-http_uwsgi_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --without-http_uwsgi_module --without-http_scgi_module --without-http_memcached_module --with-http_stub_status_module --with-http_realip_module --with-threads --add-module=/DLserver/nginx-accesskey-2.0.3 --add-module=/DLserver/Nginx-limit-traffic-rate-module-master --add-module=/DLserver/nginx_upload_module-2.2.0 --with-http_secure_link_module
注意当中的:
&#8211;with-http_realip_module
若需要反向代理时,获取后端获取真实ip用的
&#8211;with-http_stub_status_module
若要使用监控宝等的nginx监控,需要开启stub_status模块
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-
若自己编译单独安装snmp时应该添加以下参数
&#8211;with-mib-modules=ucd-snmp/diskio
选项,可以让服务器支持磁盘I/O监控。
–enable-mfd-rewrites
选项,允许用新的MFD重写mid模块,这样编译的snmp就能支持64位的计数器,能正常采集到流量。
5、编译安装
make && make install
6、相关目录与文件位置
nginx安装目录
/usr/local/nginx
nginx配置文件
/usr/local/nginx/conf/nginx.conf
/usr/local/nginx/logs
7、相关命令
(1)查看编译参数:
/usr/local/nginx/sbin/nginx -V
(2)nginx管理命令,首先进入nginx安装目录
cd /usr/local/nginx/sbin
启动命令:
停止命令:
./nginx -s stop
重新加载配置:
./nginx -s reload
或者直接使用
/usr/local/nginx/sbin/nginx/usr/local/nginx/sbin/nginx -s stop/usr/local/nginx/sbin/nginx -s reload
(3)查询进程pid
ps -ef | grep nginx
8、nginx配置修改(修改后reload平滑重启)
修改nginx.conf为
#user&worker_processes 1;#error_log& logs/error.#error_log& logs/error.log&#error_log& logs/error.log&#pid& & & & logs/nginx.events { && &worker_connections& 2048;}http {&& &include& & & &mime.&& &default_type& application/octet-&& &#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& && & & &&& &tcp_&& &tcp_ && &#keepalive_timeout& 0;&& &keepalive_timeout 65;#以下为启用限速相关模块分别为,限制连接数(在location中配置,此处为基本设置),限制请求数为每个ip 1次/s,限制每个ip的下载速度(未启用)limit_conn_zone $binary_remote_addr zone=addr:10m;limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;#limit_traffic_rate_zone& &rate $remote_addr 16m;&& &#gzip&&& &server {&& & & &listen 80;&& & & &server_name&&& & & &charset utf-8;&& & & &#access_log& logs/host.access.log&&& & & &location / {&& & & & & &root& &/这里填写刚才配置ftp时新建用户xxx的文件放置目录;&& & & & & &index& index.html index.&& & & & & &
&& & & & & &&& & & & & &accesskey_hashmethod& &md5;&& & & & & &accesskey_arg& & & & &&key&;&& & & & & &accesskey_signature& &&mypass$remote_addr&;&& & & & & &#限制每个ip连接数,超出请求数限制的最大请求数,按ip限速(未启用,未实验与连接数限制如何配合,待研究)&& & & & & limit_conn addr 1;&& & & & & limit_req zone=one burst=5;&& & & & & #limit_traffic_rate& rate 128k;&& & & & & #并限制每个连接的下载达到500K后(未启用)限制速度为128K/s&& & & & & #limit_rate_after 500k;&& & & & & &limit_rate 128k;&& & & & & &sendfile_max_chunk 1024k;&& & & & & &&& & & & & &directio 5120k;
&& & & &}&& & & &#error_page& 404& & & & & & & /404.&& & & &# redirect server error pages to the static page /50x.html&& & & &#&& & & &error_page& &500 502 503 504& /50x.&& & & &location = /50x.html {&& & & & & &root& &&& & & &}&& & & &# 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& & & & & &&& & & &#& & fastcgi_pass& &127.0.0.1:9000;&& & & &#& & fastcgi_index& index.&& & & &#& & fastcgi_param& SCRIPT_FILENAME& /scripts$fastcgi_script_&& & & &#& & include& & & & fastcgi_&& & & &#}&& & & &# deny access to .htaccess files, if Apache's document root&& & & &# concurs with nginx's one&& & & &#&& & & &#location ~ /\.ht {&& & & &#& & deny&&& & & &#}&& &}&& &# another virtual host using mix of IP-, name-, and port-based configuration&& &#&& &#server {&& &#& & listen& & & &8000;&& &#& & listen& & & &somename:8080;&& &#& & server_name& somename& alias& another.&& &#& & location / {&& &#& & & & root& &&& &#& & & & index& index.html index.&& &#& & }&& &#}&& &# HTTPS server&& &#&& &#server {&& &#& & listen& & & &443&& &#& & server_name&&& &#& & ssl_certificate& & & cert.&& &#& & ssl_certificate_key& cert.&& &#& & ssl_session_cache& & shared:SSL:1m;&& &#& & ssl_session_timeout& 5m;&& &#& & ssl_ciphers& HIGH:!aNULL:!MD5;&& &#& & ssl_prefer_server_ciphers&&& &#& & location / {&& &#& & & & root& &&& &#& & & & index& index.html index.&& &#& & }&& &#}}
其中服务器根据自己的情况调整,一般一个cpu一个worker_processes
自行调整服务器工作端口,默认为80,如果做为下载服务器,建议指定其他端口,并且在iptable中将80等web服务器需要的端口都关闭。
accesskey_signature
&#8220;mypass$remote_addr&#8221;;中的mypass可任意设置(自己的应用与之相匹配即可)
以下参数,个人根据需求自行调优
#limit_rate_after 500k;&& & & & & &limit_rate 128k;
&& & & & & &sendfile_max_chunk 256k; && & & & & &&& & & & & &directio 1024k;&& & & & & &output_buffers 1 128k;
mark:在修改nginx.conf配置启用线程池aio threads后提示错误,查看官方文档发现需要在编译nginx的时候加入&#8211;with-threads,可能许多同学都忽略了这一步。
9、nginx日志文件access.log按天切割(自动删除待后续添加)
10、配置nginx开启启动
cd /usr/local/nginx/sbin./nginxecho &/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf& && /etc/rc.local
安全重启linux系统(立刻重启(root用户使用))
shutdown -r now
shutdown -r 10 过10分钟自动重启(root用户使用)
shutdown -r 20:35 在时间为20:35时候重启(root用户使用)
重启后,查看当前所有运行的服务,看看nginx开机自动启动是否成功
shutdown -r now
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;
三、服务器监控方案
yum -y install net-snmp net-snmp-devel net-snmp-utils
net-snmp snmp-mibs-utils是监控宝等snmp所需
清空并编辑snmp配置
& /etc/snmp/snmpd.vi /etc/snmp/snmpd.conf
添加以下内容,其中public为密匙,修改为自己的
rocommunity
rocommunity
被监控服务器ip
rocommunity
192.168.1.2
rocommunity public
60.195.252.107
rocommunity public
60.195.252.110
####若采用360监控,配置如下(若两边都用,也可以把配置都添加进去,随时切换到另一家监控)
rocommunity public default
rocommunity public 101.199.100.150
rocommunity public 220.181.150.98
rocommunity public 180.153.229.230
rocommunity public 220.181.150.125
rocommunity public 103.28.11.237
rocommunity public 103.28.10.244
rocommunity public 103.28.10.245
cp /etc/snmp/snmpd.conf /usr/share/snmp/snmpd.conf
snmp控制管理命令
service snmpd {start|stop|status|restart|condrestart|reload|force-reload}
若无法管理,先杀死已经运行snmpd进程
查看snmpd进程
ps aux | grep snmpd
查看snmp服务是否运行
service snmpd status
2、OneApm篇
由oneapm.com开发的监控服务非常不错,特别适合商业用户,功能非常强悍,免费用户有功能限制,不是使用snmp,需要安装他们自己开发的程序
超级牛逼的功能:
(1)应用监控:支持php ruby js py等等各种程序的应用
例如:oneapm.com可以监控你的php执行详细情况,可以很清楚的开到哪个php文件执行慢、执行了多少秒、进行了哪些操作(最关键的就是这个,可以找到是php执行什么操作导致该文件执行速度慢,对于优化非常有帮助)、进行了哪些数据库操作
(2)数据库监控:当然支持主流的几个数据库啦
例如:管理界面可以清楚看到数据库什么操作最慢,来源于那个程序文件执行的这个操作。。。。
具体安装及使用详见oneapm.com
唯一缺点:免费版数据只能保存3天,而且功能上有限制,例如应用监控等这些高级功能付费用户才能用,而且不便宜,一个月接近1K,对个人站长来说有点高了,不过好像在管理首页可以看到摘要,看不到详细分析信息
目前新注册可以免费试用高级功能15天,用于网站测试分析够了
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;
四、FTP安装篇
1、安装vsftpd(FTP用于文件批量上传)
yum -y install vsftpd
2、测试是否安装成功
service vsftpd start
3、修改vsftpd配置文件(配置为指定用户可以访问,匿名不能访问)
vsftpd的配置文件有三个,分别是
/etc/vsftpd/vsftpd.conf/etc/vsftpd/ftpusers/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf是主配置文件
/etc/vsftpd/ftpusers配置哪些用户不能访问FTP服务器,应该将root用户加入
/etc/vsftpd/user_list该文件里的用户账户在默认情况下也不能访问FTP服务器,仅当vsftpd .conf配置文件里设置userlist_enable=NO选项时才允许该名单中的用户访问FTP。
通过搭配/etc/vsftpd/ftpusers 和 /etc/vsftpd/user_list可以限制指定用户可以访问。
vi /etc/vsftpd/vsftpd.conf
去掉以下注释符并设置:
local_enable=YES#允许本机使用者可以登入write_enable=YES#以下三条是禁止匿名使用者登入上传修改文件anonymous_enable=NOanon_upload_enable=NOanon_mkdir_write_enable=NOchown_uploads=NOxferlog_file=/var/log/vsftpd.logxferlog_file=/var/log/xferlogchroot_list_enable=NOchroot_list_file=/etc/vsftpd/chroot_listuserlist_enable=NO
关于vsftpd.conf的其他提示
/var/ftp &#8212;- 匿名用户主目录
/var/ftp/pub &#8212;- 匿名用户的下载目录
如果要更改默认下载目录,修改/etc/vsftpd/vsftpd.conf,加入如下三行:
local_root=/
chroot_local_user=YES
anon_root=/
local_root表示使用本地用户登录到ftp时的默认目录
anon_root表示匿名用户登录到ftp时的默认目录
你上面的chroot_list_file是设定锁定登陆用户在其home目录的列表,要在chroot_list_enable=YES情况下才生效。
另外,最好不要设置默认目录为/,使用建议使用mount &#8211;bind来挂载需要的目录。
创建新用户
安装ftp时实际已经创建了名为ftp的用户,需要使用passwd修改密码后,添加到userlist中区
若使用root不用新建,不过不推荐这种危险方式
新建用户按一下步骤:
这里以用户名xxx,目录/home/xxxfile为例(xxxfile即为我们做下载服务器保存的目录)
adduser -d /home/xxxfile -g ftp -s /sbin/nologin xxx
passwd xxx
输入密码即可
vi /etc/vsftpd/user_list
加入刚才新建的用户xxx
vi /etc/vsftpd/chroot_list
输入给xxx用户指定的文件目录/home/xxxfile
:wq保存退出
重启vsftpd
4、控制命令(修改配置后应重启服务)
/etc/init.d/vsftpd start& /etc/init.d/vsftpd stop& /etc/init.d/vsftpd restart
将vsftpd加入开机运行
chkconfig vsftpd on
关闭开机运行
chkconfig vsftpd off
5、添加ftp防火墙规则(参照博客内关于iptable的文章):
FTP服务器iptable规则
iptables -A INPUT -p tcp --dport 21 -j ACCEPT;iptables -A INPUT -p tcp --dport 20 -j ACCEPT;iptables -A INPUT -p tcp --dport
/etc/rc.d/init.d/iptables save&/etc/init.d/iptables restart
保存后重启服务
service iptables restart
查看端口是否正常启动
netstat -an | grep 21
若vsftp无法正常使用“227
Entering Passive Mode。。。”
在配置文件中加入pasv_enable=NO
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;
五、绑定域名至服务器,禁止IP或非绑定域名访问
六、关闭不必要的端口,修改iptable规则
注意别忘了添加以上每一个步骤中ftp、snmp监控、nginx负载均衡及反向代理所需要的端口
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;
六、linux centos通过ftp上传的中文文件名乱码
此问题不影响下载,主要因为win系统默认编码gb2132,而centos服务器设置为utf-8,
解决该问题方法参照
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;
七、服务器安全策略
1、使用尽量复杂的密码
2、修改ssh端口(老牛第一天忙的事太多,没来得及修改,默认的22端口一直有人暴力破解,几十个ip。。。最多的一个尝试了4k多次,查了下大部分都是国内IP或者香港IP,国人这素质。。。这心态。。。你有本事去黑Google 黑微软啊 黑国安啊;所以大家的独服或者vps上线后一定马上修改SSH端口)
(必要情况下采用密匙登陆,禁止root登陆)
3、启用iptable,修改iptable规则
PS:关于centos7&#8211;CentOS7用firewall命令“替代”了iptables。在这里我们需要区分“iptables服务”和“iptables命令”。虽然firewalld是替代提供的防火墙管理iptables服务,但是它仍然使用iptables对内核命令动态通信包过滤。所以它只是iptables服务代替,而不是iptables命令。
如果想切换centos 7的firewall为iptable,依次执行以下命令,注意如果不用ip6可以不用添加ip6的
systemctl stop firewalldsystemctl disable firewalld&yum install iptables-services&touch /etc/sysconfig/iptablessystemctl start iptablessystemctl enable iptables&touch /etc/sysconfig/ip6tablessystemctl start ip6tablessystemctl enable ip6table
service iptables status
看看状态吧
(1)以下为snmp的规则
监控宝snmp iptable规则
iptables -I INPUT -p udp -s 60.195.252.107 --dport 161 -j ACCEPT;iptables -I INPUT -p udp -s 60.195.252.110 --dport 161 -j ACCEPT;iptables -I INPUT -p udp -s 127.0.0.1 --dport 161 -j ACCEPT;iptables -I INPUT -p udp -s 45.63.121.42 --dport 161 -j ACCEPT;iptables -I INPUT -p udp -s 192.168.1.2 --dport 161 -j ACCEPT
###若采用360监控,添加规则如下:
iptables -A INPUT -i eth0 -p udp -s 101.199.100.150 --dport 161 -j ACCEPT;iptables -A INPUT -i eth0 -p udp -s 220.181.150.98 --dport 161 -j ACCEPT;iptables -A INPUT -i eth0 -p udp -s 180.153.229.230 --dport 161 -j ACCEPT;iptables -A INPUT -i eth0 -p udp -s 220.181.150.125 --dport 161 -j ACCEPT;iptables -A INPUT -i eth0 -p udp -s 103.28.11.237 --dport 161 -j ACCEPT;iptables -A INPUT -i eth0 -p udp -s 103.28.10.244 --dport 161 -j ACCEPT;iptables -A INPUT -i eth0 -p udp -s 103.28.10.245 --dport 161 -j ACCEPT
(2)FTP服务器iptable规则
iptables -A INPUT -p tcp --dport 15313 -j ACCEPT;iptables -A INPUT -p tcp --dport
(3)以下为常规端口设置(注意修改SSH等端口为你想要的)
iptables -A INPUT -i lo -j ACCEPT;iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT;iptables -A OUTPUT -j ACCEPT;iptables -A INPUT -p tcp --dport 22 -j ACCEPT;iptables -A INPUT -p tcp --dport 80 -j ACCEPT;iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT;iptables -A INPUT -j REJECT;iptables -A FORWARD -j REJECT
chkconfig --level 345 iptables on
service iptables save
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;
八、nginx静态文件服务器使用中出现的问题及解决方法
问题:重新加载nginx.conf后重启nginx报错
nginx: [error] open() &/usr/local/nginx/nginx.pid& failed (2: No such file or directory)
解决方法,输入:
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
出现以下提示的处理方法
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
先查看端口占用情况
netstat -ntpl
查找到nginx的进程ID后kill掉
然后重新按开头来
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;
问题:重启nginx时 提示 no such file
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;
如何禁止使用多线程下载工具多线程下载?
以下配置方法见官方文档
启用nginx的限制并发数模块 ngx_http_limit_zone_module (生产服务器已启用)
ngx_http_limit_conn_module 模块虽说可以解决当前面临的并发问题,但是会引入另外一些问题的。如前端如果有做LVS或反代,而我们后端启用了该模块功能,那不是非常多503错误了?这样的话,可以在前端启用该模块,要么就是设置白名单
补充:查阅“运维生存时间”上相关文章,知晓该模块只是限制连接数,结合limit_rate控制每个连接速度,但是并不是基于ip或者url控制下载速度,意思是同一个ip来的多个
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;
如何限制请求数,设置每个ip请求频率
启用限制请求数模块 ngx_http_limit_req_module (生产服务器暂时未启用,Mark一下)
可能要对某些IP不做限制,需要使用到白名单
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;
若要启用上传功能
可开启nginx第三方模块Limit Upload Rate限制上传速度(暂未使用,mark一下)
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;
安装snmp 添加360监控
相关文章推荐
转载请保留,转载自:老牛博客
& 下一篇:
有人回复时邮件通知我}

我要回帖

更多关于 静态服务器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信