首页 > 后端开发 > php教程 > Nginx的安装与配置

Nginx的安装与配置

不言
发布: 2023-03-29 18:36:01
原创
2473 人浏览过

这篇文章主要介绍了关于Nginx的安装与配置,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

Nginx学习实践


一、选择Nginx目的

  1. 高并发连接
    官方测试nginx能够支撑5万并发连接,实际测试可以达到3万左右,按照这样计算,每天可以处理
    亿次访问量,采用最新epoll(Linux 2.6内核)和kqueue(freebsd)网络I/O模型;而achache则使用的是传统的selelct
    模型

  2. 内存消耗小
    Nginx+php(FastCIGI)服务器在3万并发连接下,开启10个nginx进程消耗150MB内存(15MB*10),开启64个php-cgi
    进程消耗1280MB内存(20MB*64),使用webbench做压力测试,在3万并发量速度依然很快。

  3. Nginx支持负载均衡

  4. Nginx支持反向代理

  5. 成本低廉
    相对于F5BIG-IP、NetScaler等硬件负载均衡交换机动辄10多万设置几十万,可以免费使用,并且可以用于商业用途

  6. Nginx请求的连接方法
    select,poll,kqueue,epoll

二、安装Nginx

准备环境
Linux系统是Centos 6.5 64位,我直接切换到root用户下安装
官方文档:http://nginx.org/en/

su root
登录后复制

进入用户目录下载程序

cd /usr/local/src
登录后复制

现在相关组件

ngnix:wget http://nginx.org/download/nginx-1.13.12.tar.gzwget http://www.openssl.org/source/openssl-fips-2.0.10.tar.gzwget http://zlib.net/zlib-1.2.11.tar.gzwget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gz
登录后复制

安装c++编译环境,如已安装可略过

[root@localhost src]# yum install gcc-c++省略安装内容...期间会有确认提示输入y回车
Is this ok [y/N]:y
省略安装内容...
登录后复制

安装Nginx及相关组件

openssl安装
[root@localhost src]# tar zxvf openssl-fips-2.0.10.tar.gz省略安装内容...[root@localhost src]# cd openssl-fips-2.0.10[root@localhost openssl-fips-2.0.10]# ./config && make && make install省略安装内容...pcre安装
[root@localhost src]# tar zxvf pcre-8.40.tar.gz省略安装内容...[root@localhost src]# cd pcre-8.40[root@localhost pcre-8.40]# ./configure && make && make install省略安装内容...zlib安装
[root@localhost src]# tar zxvf zlib-1.2.11.tar.gz省略安装内容...[root@localhost src]# cd zlib-1.2.11[root@localhost zlib-1.2.11]# ./configure && make && make install省略安装内容...nginx安装:
这里的先增加一个nginx用户组和一个nginx用户
例如:新建用户加入ftp组,/sbin/nologin意思是用户不允许登录(通过ftp可以连接),用户名为nginx
groupadd -r ftp
useradd -s /sbin/nologin -g ftp -r nginx


[root@localhost src]# tar zxvf nginx-1.13.12.tar.gz省略安装内容...[root@localhost src]# cd nginx-1.13.12[root@localhost nginx-1.10.2]# ./configure --sbin-path=/usr/local/nginx/sbin \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--pid-path=/usr/local/nginx/logs/nginx.pid \
--with-http_ssl_module \
--with-pcre=../pcre-8.40 \  #指向解压的源码目录--with-zlib=../zlib-1.2.11 \    #指向解压的源码目录--with-openssl=../openssl-2.0.10 \ #指向解压的源码目录--with-http_stub_status_module \#启用 nginx 的 NginxStatus 功能,用来监控 Nginx 的当前状态--user=nginx \
--group=nginx



[root@localhost nginx-1.10.2]#make && make install省略安装内容...
登录后复制

启动Nginx

查看你的nginx安装位置

whereis nginx
登录后复制

启动、停止、重启命令

启动:/usr/local/nginx/sbin/nginx
重启:/usr/local/nginx/sbin/nginx -s reload
停止:/usr/local/nginx/sbin/nginx -s stop
登录后复制

配置文件打开、验证

配置文件:vim /usr/local/nginx/conf/nginx.conf
验证配置文件:/usr/local/nginx/sbin/nginx -t
登录后复制

查看nginx进程

ps -aux | grep nginx
登录后复制

查看端口

netstat -tulnp | grep :80      查询以80开头的端口服务
登录后复制

如果看到进程了,在本地浏览器输入:http://localhost就会看到欢迎界面;说明安装成功了。
如果在别的机器访问可以输入nginx那台服务器ip,不过你要确保80端口是开放的,后面配置ssl要确保443端口开放。

Nginx配置

1、进程配置:nginx开辟的进程数根据cpu的核数来定
这里写图片描述
首先要查看cpu核数命令:

cat /proc/cpuinfo
登录后复制

2.worker_connections连接数配置
网上建议:
如果nginx 中worker_connections 值设置是1024,worker_processes 值设置是4,按反向代理模式下最大连接数的理论计算公式:最大连接数 = worker_processes * worker_connections/4
查看相关资料,生产环境中worker_connections 建议值最好超过9000,计划将一台nginx 设置为10240,再观察一段时间。

3.location配置
语法:location[=|~|~*|^~]/uri/{……}
默认值:no
使用字段:server
这个参数根据uri的不同需求来进行配置,可以使用字段串与正则表达式匹配,如果要使用正则表达式,你必须制定下列前缀
~:区分大小写
~*:不区分大小写
^~:禁止表达式匹配
=:精确匹配

例子:

location = / {    #只匹配/的查询
    [configurationA]
}

location / {    #匹配任务以/开始的查询,但是正则表达式与一些较长的字符串将被首先匹配
   [configuration B ]
}

location ^~ /images/ {    #匹配任何以/images/开始的查询并停止搜索,不检查正则表达式
    [configuration C ]
}

location ~*.(gif|jpg|jpeg)$ {    #匹配任何以gif,jpg,jpeg结尾的文件,但是所有/images/目录的请求将在configuration C中处理
    [configuration D]
}


error_page  404 403              /404.html;
location = /404.html {
    root   /var/christy/www/web;
}


location /data {    #开启data目录浏览
    autoindex on;
}#类似于别名location /i/ {    #当访问i的时候别名的路径就是/data/w3/images/;
    alias /data/w3/images/;
}
登录后复制

4.地址重写

Rewrite主要的功能就是实现URL的重写,nginx的rewrite规则采用PCRE Perl兼容正则表达式的语法进行规则匹配,
如果需要nginx的rewrite功能,在编译nginx之前,需要编译安装PCRE库

URL是统一资源定位符。如:http://www,linkwan.com/333/welcome.htmURI由一个通过通用资源标志符进行定位。比如:333/welcome.htm

地址重写用到的指令    if指令
规则语法

如果用户的代理是微软的msie(ie9以下),那么在浏览器里面输入http://www.chrXXtyedu.cn/dd就会跳转到http://www.christyedu.cn/msie/$1;ie10以上是Mozillaif ($http_user_agent ~ MSIE) {
    rewrite ^(.*)$ /msie/$1 break;
}



如果请求的文件名不存在就重定向到/site/$host/images/$1if(!-f $request_filename){
    rewrite ^/img/(.*)$ /site/$host/images/$1 last;
}

location ~* \.(gif|jpg|png|swf|flv)$ {
    valid_referers none blocked www.chrXXstyedu.cn chrXXtyedu.cn;    if ($invalid_referer) {
        rewrite ^/(.*) http://www.test.com/333/welcome permanent;
    } //防盗链}

设置限速
location /download/ {
    limit_rate_after 500k;
    limit_rate 50k;
}
大概意思是:用户下载达到 500k 后,便控制其速度在 50k 以内。
登录后复制

5.ssl配置
1_chrXXtyedu.cn_bundle.crt
2_chrXXtyedu.cn.key
这两个文件放在conf目录下
一定要把443端口放开!!!!

server {
        listen       443 ssl;
        server_name  www.chXXXtyedu.cn chrXXyedu.cn;

        ssl_certificate      1_chrXXtyedu.cn_bundle.crt;
        ssl_certificate_key  2_chrXXtyedu.cn.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers  on;

        location / {
            root   /var/chXXty/www/web-https;
            index  index.html index.htm;
        }
    }
登录后复制

6.日志管理

 log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';    $http_x_forwarded_for和$remote_addr客户端的ip地址(代理服务器,显示代理服务ip)    $remote_user用来记录远程客户端用户名称    $time_local用来记录访问时间以及时区    $request用于记录请求的URL与HTTP协议    $status用于记录请求状态,例如成功是状态为200,页面找不到时404
    $body_bytes_sent用于记录发送给客户端的文件主题内容大小    $http_referer用于记录是从哪个页面链接访问过来的    $http_user_agent用于记录客户端浏览器的相关信息
登录后复制

7.介绍部分缓存

open_log_file_cache指令

语法: open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
open_log_file_cache off;
默认值: open_log_file_cache off;
配置段: http, server, location

对于每一条日志记录,都将是先打开文件,再写入日志,然后关闭。可以使用open_log_file_cache来设置日志文件缓存(默认是off),格式如下:

参数注释如下:
max:设置缓存中的最大文件描述符数量,如果缓存被占满,采用LRU算法将描述符关闭。
inactive:设置存活时间,默认是10s
min_uses:设置在inactive时间段内,日志文件最少使用多少次后,该日志文件描述符记入缓存中,默认是1次
valid:设置检查频率,默认60s
off:禁用缓存
实例如下:
代码如下:
open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;



http {
    client_max_body_size 300m;
    client_body_buffer_size 600;
    proxy_connect_timeout 600;
    proxy_read_timeout 600;
    proxy_send_timeout 600;
    proxy_buffer_size 16k;
    proxy_buffers 4 32k;
    proxy_busy_buffers_size 64;
    proxy_temp_file_write_size 64k;
 }

 允许客户端请求的最大的单个文件字节数
 client_max_body_size

 缓冲区代理缓冲用户端请求的最大字节数 可以理解为先保存到本地再传给用户
 client_body_buffer_size

 跟后端服务器连接的超时时间 发起握手等候响应超时时间
 proxy_connect_timeout

 连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理
 proxy_read_timeout

 后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据
 proxy_send_timeout

 代理请求缓存区_这个缓存区间会保存用户的头信息以供Nginx进行规则处理_一般只要能保存下头信息即可
 proxy_buffer_size 16k

 同上告诉Nginx保存单个用的几个Buffer及最大用多大空间
 proxy_buffers 4 32k

 如果系统很忙的时候可以申请更大的proxy_bufers 官方推荐*2
 proxy_busy_buffers_size 64k;

 proxy缓存临时文件的大小
 proxy_temp_file_write_size 64k;

 location /sms {
    proxy_pass http://127.0.0:8080;    #设置Host是真实浏览器的,而不是代理的
    proxy_set_header Host $host;
    proxy_cache cache_one;    #设置请求ip是真实的ip,而不是代理的
    proxy_set_header X-Forwarded-For $remote_addr;
 }
登录后复制

8.代理,反向代理和负载均衡

正向代理的概念

正向代理,也就是传说中的代理,他的工作原理就像一个跳板,
简单的说,
我是一个用户,我访问不了某网站,但是我能访问一个代理服务器
这个代理服务器呢,他能访问那个我不能访问的网站
于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容
代理服务器去取回来,然后返回给我
正常情况: 
client —(send request)—> server
代理情况: 
client —(send request)—> clinet proxy –(send request)—> server
登录后复制

什么又是反向代理

正向代理中代理的过程是客户端,代理机器是作为一个访问客户的身份的;而在反向代理中代理机器是作为服务身份。
正向代理中代理的过程是客户端,服务端对代理的存在无感知;而在反向代理中客户机对代理的存在无感知。
反向代理情况: 
clinet –(send request)–> server proxy –(send request)–>other 
server
登录后复制
Nginx集反向代理和负载均衡于一身,在配置文件中修改配就可以实现
upstream xxx{};upstream模块是命名一个后端服务器组,组名必须为(proxy_pass的名称)后端服务器站点域名,内部可以写多台服务器ip和port,还可以设置跳转规则及权重等等proxy_pass;代表后端服务器组名,此组名必须为后端服务器站点域名server_name和upstream{}的组名可以不一致,server_name是外网访问接收请求的域名,upstream{}的组名是跳转后端服务器时站点访问的域名

upstream chxxty_server {
        server 119.29.54.177:8081 weight=5;
        server 119.29.54.177:8080 weight=10 max_fails=3 fail_timeout=30s;} 


server {
        listen       443 ssl;
        server_name  www.chXXtyedu.cn chxxxedu.cn;

        ssl_certificate      1_chxxtyedu.cn_bundle.crt;
        ssl_certificate_key  2_chxxyedu.cn.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers  on;

        location / {
            root   html;
            index  index.html index.htm;
        }
        location ~ .* {
                proxy_pass http://chxxty_server;
                #设置Host是真实浏览器的,而不是代理的
                proxy_set_header Host $host;
                #设置请求ip是真实的ip,而不是代理的
                proxy_set_header X-Forwarded-For $remote_addr;
        }
}
登录后复制

祝大家成功!

相关推荐:

nginx应用:使用nginx进行负载均衡

Nginx的场景实践

Nginx编译安装Lua模块 

以上是Nginx的安装与配置的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板