-
安装nginx
这里我们直接使用apt安装吧,使用二进制源码进行make编译安装也可,但是,安装nginx所需的依赖库太繁琐,稍有不慎就会导致前功尽弃,我们直接使用nginx
#更新源 sudo apt update #安装nginx sudo apt install nginx
-
了解通过源安装的nginx的目录结构
- 所有的配置文件都在/etc/nginx下,并且每个虚拟主机已经安排在了/etc/nginx/sites-available下
- 程序文件在/usr/sbin/nginx
- 日志放在了/var/log/nginx中
- 并已经在/etc/init.d/下创建了启动脚本nginx
- 默认的虚拟主机的目录设置在了/var/www/nginx-default (有的版本 默认的虚拟主机的目录设置在了/var/www, 请参考/etc/nginx/sites-available里的配置)
-
启动nginx
#启动nginx sudo systemctl start nginx #查看是否成功 sudo systemctl status nginx #本地访问测试是否成功,成功的话则会返回nginx的首页的html代码 sudo curl localhost
外部访问测试
首先你必须开放对应端口,查看防火墙设置,云服务器的可以去控制台直接打开即可。然后再外部浏览器访问IP即可,成功的话就会显示这个
-
nginx的使用,这里就不细说了,资料很多,大多就是配置文件
-
(最佳实践) 这里的也就是配置nginx的全局参数,通过与自己服务器的配置相配合,达到nginx性能最优
这种情况个人使用,应该很少会遇到,也就是nginx在高并发下,可能会报错“Too many open files”,导致服务器崩溃,那这是什么原因?大家可以百度一下linux文件最大打开数。对应nginx的配置项,也就是这个配置项
user nobody nobody; worker_processes 2; error_log logs/error.log notice; pid logs/nginx.pid; #这个,相信大家很少看见到这个配置 worker_rlimit_nofile 65535; events{ use epoll; worker_connections 65536; }
首先要说明,这个参数是要被限制于你linux系统的限制,所以说这个配置项需要结合最大文件打开数来配置
最大文件打开数:这个限制说明,一个用户在能够在一个单独会话中所能打开的最大文件数。
#通过ulimit命令查看 ulimit -n #结果:(服务器初始情况下,一般都是1024)
最大文件打开数为1024,如果nginx在多并发情况下,是远远不够的,经常会报错,我们这里需要修改,修改为符合自己的限制,我的服务器是腾讯云2核4G的,客服建议我设置成65535即可
修改最大文件打开数
-
每用户上限
sudo vim /etc/security/limits.conf
在末尾添加
* hard nofile 65535 * soft nofile 65535 root hard nofile 65535 root soft nofile 65535
修改后,需要logout并重新登录
-
对于Daemon进程需要其他步骤,修改PAM-LIMITS
sudo /etc/pam.d/common-session
添加以下内容
session required pam_limits.so
-
修改nginx配置文件
user www; worker_processes 4; #默认进程数为1,为提高性能官方的建议是修改成cpu的内核数或为内核数的2倍,可以减少机器io带来的影响 error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; worker_rlimit_nofile 65535; #配置要和系统的单进程打开文件数一致,可通过 ulimit -n 命令查询 events { #根据系统的最大打开文件数来调整,worker_connections进程连接数量要小于等于系统的最大打开文件数 #worker_connections进程连接数量真实数量 = worker_connections*worker_process worker_connections 16383; # 根据本例,理论上单个进程允许的客户端最大连接数(65535/4) } http { include /etc/nginx/mime.types; default_type application/octet-stream; client_max_body_size 25m; client_header_buffer_size 4k; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; server_tokens off; #隐藏nginx版本号 access_log off; #关闭请求日志优化性能 #access_log /var/log/nginx/access.log main; open_file_cache max=65535 inactive=20s; sendfile on; #tcp_nopush on; keepalive_timeout 60; #gzip on; include /etc/nginx/conf.d/*.conf; }
-
6.重启nginx
sudo systemctl restart nginx