CentOS中使用Nginx各项配置、注意事项


文章就是整理一下本人使用Nginx的过程中遇到的问题、处理方法,有问题的话请指正!文章也会不定时更新!谢谢

选择、下载Nginx

Nginx官网下载传送门
在这里插入图片描述
在页面中选择自己需要的版本,一般建议选择Stable version(稳定版),Linux系统下载第二列即可,Windows下载第四列即可,pgp是用来验证的,和使用无关;如果有特殊需求就在Legacy versions(历史版本选择),该文章均以Nginx-1.16.0、CentOS 6说明,不同之处留言说明;

安装Nginx

使用wget或者ftp等方式将安装包存储在服务器中

tar -zxvf nginx-1.16.0.tar.gz

安装依赖环境

默认需要pcre、zlib、ssl、gcc,如果已经安装的就跳过

yum -y install gcc-c++ pcre-devel zlib-devel openssl openssl-devel

Ubuntu就是如下命令

sudo apt-get install -y gcc libpcre3 libpcre3-dev zlib1g-dev openssl libssl-dev

编译Nginx

编译时可以指定安装路径(–prefix=)和配置Nginx需要安装的模块(–with……)

cd nginx-1.16.0
./configure --prefix=/data/local/nginx/ --with-http_gzip_static_module --with-http_ssl_module

更多模块安装方式请看nginx官网的文档http://nginx.org/en/docs/
在这里插入图片描述
选择想使用的模块,进入详细页面,复制下图选中部分的内容追加到configure命令后就行
在这里插入图片描述
Nginx编译成功后输出大致如下

Configuration summary
  + using system PCRE library
  + using system OpenSSL library // 看是否安装ssl模块,没安这个就是不可用的
  + using system zlib library

  nginx path prefix: "/data/local/nginx/"
  nginx binary file: "/data/local/nginx//sbin/nginx"
  nginx modules path: "/data/local/nginx//modules"
  nginx configuration prefix: "/data/local/nginx//conf"
  nginx configuration file: "/data/local/nginx//conf/nginx.conf"
  nginx pid file: "/data/local/nginx//logs/nginx.pid"
  nginx error log file: "/data/local/nginx//logs/error.log"
  nginx http access log file: "/data/local/nginx//logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"

构建、安装

make

成功后输出大致如下

sed -e "s|%%PREFIX%%|/data/local/nginx/|" \
	-e "s|%%PID_PATH%%|/data/local/nginx//logs/nginx.pid|" \
	-e "s|%%CONF_PATH%%|/data/local/nginx//conf/nginx.conf|" \
	-e "s|%%ERROR_LOG_PATH%%|/data/local/nginx//logs/error.log|" \
	< man/nginx.8 > objs/nginx.8
make[1]: Leaving directory `/data/software/nginx/nginx-1.16.0'

然后

make install

成功后输出大致如下

test -d '/data/local/nginx//logs' \
	|| mkdir -p '/data/local/nginx//logs'
make[1]: Leaving directory `/data/software/nginx/nginx-1.16.0

检查安装是否成功
到./configure --prefix=配置的路径查看,未指定安装位置就到/usr/local/nginx查看,结构大致如下

drwxr-xr-x 2 root root 4096 Aug  2 16:19 conf // nginx的配置文件存放位置
drwxr-xr-x 2 root root 4096 Aug  2 16:19 html
drwxr-xr-x 2 root root 4096 Aug  2 16:19 logs // nginx日志存放位置
drwxr-xr-x 2 root root 4096 Aug  2 16:19 sbin // nginx运行文件

检查命令

cd sbin
./nginx –v

响应如下即成功:

nginx version: nginx/1.16.0

使用nginx命令如果报错 ./nginx: error while loading shared libraries:libpcre.so.1: cannot open shared object file: No such file or directory
代表该版本的pcre环境库没有关联上,目前最方便的解决方案:
使用sudo ln -s /lib64/libpcre.so.0.0.1 /lib64/libpcre.so.1
此操作是在系统lib库中创建软链接,小心使用

Nginx基本命令

nginx // 启动Nginx
nginx -s stop // 停止Nginx进程
nginx -s reload // 重新加载配置文件
nginx -t // 检查配置文件
nginx -c 相对nginx根目录路径的配置文件路径 // 指定配置文件启动 
nginx -V // 查看nginx安装的模块

Nginx安全

出于安全考虑,避免使用root用户启动Nginx,但是这不代表不可用root用户运行,详见如下说明

cd nginx/conf
vim nginx.conf

配置文件第一行默认是 #user nobody
也就是在不指定的情况下,使用root用户运行nginx命令就是root用户运行,如果是普通用户运行nginx命令就是nobody用户运行
但是当将注释去掉之后,例如:创建一个组名nginx中名为nginx的用户
然后将配置文件改为user nginx
无论是-t检查或者nginx启动都会提示警告:

nginx: [warn] the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /infapp/local/nginx/conf/nginx.conf:2

意思是只有使用超级管理员启动时,user的配置才生效,这个时候使用root用户运行nginx命令就是分配给nginx用户运行,如果是普通用户运行nginx命令还是nobody用户运行,因为普通用户运行时,会忽略user配置,所以最好是创建一个用来运行Nginx的专用用户,然后将user配置为该用户,再用root用户启动Nginx

小提示:由于系统限制,如果使用1024以下的端口号就必须使用root用户身份

当使用Nginx时,上传文件偶尔发生500错误响应

这个500的响应,原因有可能会很多,这里排除服务的错误,从Nginx方面描述,所以先确保服务正常运行、可用,然后检查Nginx的日志;

tail -f nginx根目录/logs/error.log

如果这里有如下错误,错误关键字client_body_temp/0000000079路径的访问权限不足,

2019/10/18 13:26:28 [crit] 5517#0: *6997306 open() "CSDN_Aubrey_J/nginx/client_body_temp/0000000079" failed (13: Permission denied), client: 100.*.*.*, server: 106.*.*.*, request: "POST CSDN_Aubrey_J/upload HTTP/1.1", host: "CSDN_Aubrey_J", referrer: "https://CSDN_Aubrey_J"

说明Nginx的权限不足,client_body_temp该文件夹是在上传时Nginx的缓存目录,如果Nginx的运行用户权限不足不能读写该文件夹就会造成错误响应,解决方案是指定一个有权限读写Nginx目录的用户,并按照上面的安全描述的方式配置、重启Nginx

其他报错信息或者情况还没遇到,遇到的留言描述,看到会及时回复、讨论解决方案

已安装好的Nginx增加模块

1、nginx -s stop 停止Nginx服务
2、进入Nginx安装根目录/sbin,备份原nginx执行文件cp nginx nginx.bak
3、进入Nginx源文件(安装包)目录下,重复上面的安装流程,注意在configure那步把需要的模块添加到编译参数中(包括已安装的模块,不然重新安装后已经安装的就没了),其他正常
4、在make install之后就可以使用了

SSL配置

SSL配置也就是https访问配置。
我们需要将证书文件上传至服务器的某个路径中(记住这个路径)
然后我们在Nginx配置中修改Sever
内容如下

server {
    listen 443 ssl;  # 1.1版本后这样写
    server_name www.domain.com; #填写绑定证书的域名
    ssl_certificate www.domain.com_bundle.crt;  # 指定crt证书文件的位置,绝对路径
    ssl_certificate_key www.domain.com.key;  # key文件绝对路径,同上
    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 / {
        // ……其他不变
    }
}

重启Nginx服务即可

缓存设置

Nginx可以指定响应的信息是否可以缓存、缓存时间等,建议设置在代理中;
也就是某个代理的请求中,哪些指定的信息做指定的缓存配置,例如VUE的静态资源访问代理

location /platform {
    try_files $uri $uri/ /app/index.html last; // 拦截platform、platform/,带/和不带/的URI,重定向到/app/index.html,VUE资源主页面(相对于root的路径下的子路径)
    root     /project/soft; // 静态资源所在文件夹路径
    index  index.html index.htm;
    
    if ($request_filename ~* .*\.(?:htm|html)$)
    {
        // 禁止缓存
        add_header Cache-Control "private, no-store, no-cache, must-revalidate, proxy-revalidate";
    }
    if ($request_filename ~* .*\.(?:js|css)$)
    {
        # add_header Cache-Control "private, no-store, no-cache, must-revalidate, proxy-revalidate";
        expires      30m;
    }
    if ($request_filename ~* .*\.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm)$)
    {
        # add_header Cache-Control "private, no-store, no-cache, must-revalidate, proxy-revalidate";
        expires      30m; // 缓存30分钟
    }
}

代理设置(服务、VUE)

后台服务代理配置

location /mobile {
    proxy_pass  http://localhost:8080/mobile; // 代理转发地址

    proxy_connect_timeout 60; // 连接超时时长
    proxy_send_timeout 60; // 请求超时时长
    proxy_read_timeout 60; // 响应超时时长

    // 以下的配置是防止代理访问失败时,浏览器暴露服务的真实地址
    proxy_set_header HOST $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

VUE静态资源路由代理

location /platform {
    try_files $uri $uri/ /app/index.html last; // 拦截platform、platform/,带/和不带/的URI,重定向到/app/index.html,VUE资源主页面(相对于root的路径下的子路径)
    root     /project/soft; // 静态资源所在文件夹路径
    index  index.html index.htm;
}

问题:unknown directive “某某配置名” in /usr/local/nginx/conf/nginxconf

就是没加载到相应的模块,按照上面增加模块的方法增加对应的模块,然后重启即可

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值