安装Nginx踩到的坑
[[toc]]
装机 先进入 cd /user/local/src
没有src
,mkdir src
自行新建
nginx下载地址
wget wget http://nginx.org/download/nginx-1.18.0.tar.gz#解压 tar -xzvf nginx-1 .18 .0 .tar.gz cd nginx-1 .18 .0 .tar.gz ./configure --prefix=/usr/local/nginx make make install
测试是否安装成功 cd /user/local/nginx./sbin/nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
启动nginx cd /usr/local/nginx/sbin./nginx // 启动nginx ./nainx -s stop // 停止nginx
打开localhost 默认是 80 端口,切记这里不要使用6666端口号 谷歌和火狐禁用6666端口号。
能看见这个页面说明已经成功了。
为了后期更好的时候nginx,可以配置下全局变量 我用的是软连接 ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/
将nginx作为服务启动 在生产环境中,一般都希望将 nginx 作为一项服务,能在系统重启后自己运行起来。 那就需要在 /usr/lib/systemd/system/ 目录下,创建 nginx.service 文件,并输入以下内容(并保存退出):
cd /usr/lib/systemd/system/vi nginx.service
[Unit] Description=nginx After=network.target [Service] Type=forking ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s quit PrivateTmp=true [Install] WantedBy=multi-user.target
启动nginx服务(此时需要先用ps查看nginx进程是否已存在,若已存在,则服务会启动失败。启动服务前必须先将nginx进程kill掉):
设置开机自启动:
查看服务状态:
部署服务 既然是在本地配置的nginx就可以用编辑器打开文件了,打开访达然后 shift+com+g
输入 /usr/local/nginx/conf
,然后用编辑器打开 nginx.conf
配置文件
打开后是大致是这个样子的有删减
http { include mime.types; default_type application/octet-stream; sendfile on ; keepalive_timeout 65 ; server { listen 80 ; server_name localhost; location / { root html; index index.html index.htm; } } }
这里的http块: 可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。
这里还有一个权限的问题 ,可能导致项目打开是403,在nginx目录上一级目录执行 sudo chown -R $(whoami) ./nginx
,然后重新加载nginx,不行的话看看是不是的打包后的文件没有权限。
然后我部署自己的服务
可以保持这个页面的简洁,单独新建一个vhost文件夹 然后在里面配置新项目,最后用 include vhost/*.conf;
直接引入进来;
我这里展示直接就这样了
server { listen 9001 ; index index.html index.htm index.php default.html default.htm default.php; root /home/wwwroot/mic-react/build; location / { try_files $uri $uri / /index.html; } location ~ .*\.(html|text)?$ { add_header Access-Control-Allow-Origin '*' ; add_header Access-Control-Allow-Headers X-Requested-With; add_header Access-Control-Allow-Methods GET,POST,OPTIONS; } location ~ .*\.(svg|gif|jpg|jpeg|png|bmp|swf|woff)$ { add_header Access-Control-Allow-Origin '*' ; add_header Access-Control-Allow-Headers X-Requested-With; add_header Access-Control-Allow-Methods GET,POST,OPTIONS; expires 30d ; } location ~ .*\.(js|css)?$ { add_header Access-Control-Allow-Origin '*' ; add_header Access-Control-Allow-Headers X-Requested-With; add_header Access-Control-Allow-Methods GET,POST,OPTIONS; expires 12h ; } location ~ /.well-known { allow all; } location ~ /\. { deny all; } access_log off ; }
这里有个巨坑,在云服务器的时候 root 对应项目的时候,是可以正常运行的,但是在本地运行的时候,是没办法加载本地资源的😌,全部包404,看遍好多文章都不行,耽误了半天。实际的原因是 nginx做代理后的虚拟路径和静态资源的请求路径不一致导的
然后其实就是单独给静态的资源设置对应的root目录,代码如下:
location /js/ { root /Users/hzf/Desktop/my-project/dist/js; autoindex on ; } location /font/ { root /Users/hzf/Desktop/my-project/dist/font; autoindex on ; } location /css/ { root /Users/hzf/Desktop/my-project/dist/css; autoindex on ; }
到目前为止,本地的nginx就可以正常运行了,后面遇到什么问题,我在及时更新。