资讯专栏INFORMATION COLUMN

Java 实战开发之Nginx、Mysql环境安装(二)

yedf / 1010人阅读

摘要:你赋权语句是也就是针对这个数据库赋权。这就是的权限检查模块的工作过程。并不是你出现了错误,而是的内部机制就是这样的。这里面对的权限机制做了详细的讲解。

</>复制代码

  1. 本节会安装Nginx,Mysql.
一、Nginx反向代理服务器 1、Nginx简介

Nginx是一款轻量级Web服务器、也是一款反向代理服务器.

作用:
(1)、可以直接支持Rails和PHP的程序
(2)、可作为HTTP反向代理服务器
(3)、作为负载均衡服务器
(4)、作为邮件代理服务器
(5)、帮助实现前端动静分离

特点:
高稳定、高性能、资源占用少、支持热部署

2、Nginx安装

安装环境:centOS 6.8 64位
安装版本:1.0.2

安装步骤:

安装gcc(命令:yum install gcc,可输入 gcc -v 查询系统是否自带安装)

安装pcre(命令:yum install pcre-devel)

安装zlib(命令:yum install zlib zlib-devel)

安装openssl(命令:yum install openssl openssl-devel,如需支持ssl,才需安装openssl)

综合命令:

</>复制代码

  1. yum install gcc pcre-devel zlib zlib-devel openssl openssl-devel

5.下载源码包,选择稳定版本,解压缩安装(http://www.nginx.org/)

</>复制代码

  1. wget http://nginx.org/download/nginx-1.10.2.tar.gz

6.解压缩

</>复制代码

  1. tar -zxvf nginx-1.10.2.tar.gz

7.进入Nginx目录之后执行 ./configure
1)、也可以指定安装目录,增加参数 --prefix=/usr/nginx
2)、如果不指定路径,可以通过 whereis nginx 来查询

8.继续执行 make
9.继续执行 make install

默认安装在 /usr/local/nginx

安装成功之后,可以测试访问,默认是80端口:

3、Nginx常用命令 1.测试配置文件

安装路径下的 /nginx/sbin/nginx -t

2.启动命令

安装路径下的 /nginx/sbin/nginx

</>复制代码

  1. /usr/local/nginx/sbin/nginx
3.停止命令

安装路径下的 /nginx/sbin/nginx -s stop
或:nginx -s quit

4.重启命令

安装路径下的 /nginx/sbin/nginx -s reload

5.查看进程命令

</>复制代码

  1. ps -ef | grep nginx
6.平滑重启

kill -HUP [Nginx主进程号(即查看进程命令查到的PID)]

7.增加防火墙访问权限

</>复制代码

  1. sudo vim /etc/sysconfig/iptables

</>复制代码

  1. -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

重启防火墙:

</>复制代码

  1. sudo service iptables restart
4、Nginx虚拟域名配置及测试 网站域名配置

修改配置文件:

</>复制代码

  1. [root@corwien conf]# pwd
  2. /usr/local/nginx/conf
  3. # 添加文件夹
  4. mkdir vhost

编辑nginx配置文件:

</>复制代码

  1. vim nginx.conf

nginx.conf 配置文件

</>复制代码

  1. #user nobody;
  2. worker_processes 1;
  3. #error_log logs/error.log;
  4. #error_log logs/error.log notice;
  5. #error_log logs/error.log info;
  6. #pid logs/nginx.pid;
  7. events {
  8. worker_connections 1024;
  9. }
  10. http {
  11. include mime.types;
  12. default_type application/octet-stream;
  13. #log_format main "$remote_addr - $remote_user [$time_local] "$request" "
  14. # "$status $body_bytes_sent "$http_referer" "
  15. # ""$http_user_agent" "$http_x_forwarded_for"";
  16. #access_log logs/access.log main;
  17. sendfile on;
  18. #tcp_nopush on;
  19. #keepalive_timeout 0;
  20. keepalive_timeout 65;
  21. #gzip on;
  22. server {
  23. listen 80;
  24. server_name localhost;
  25. #charset koi8-r;
  26. #access_log logs/host.access.log main;
  27. location / {
  28. root html;
  29. index index.html index.htm;
  30. }
  31. #error_page 404 /404.html;
  32. # redirect server error pages to the static page /50x.html
  33. #
  34. error_page 500 502 503 504 /50x.html;
  35. location = /50x.html {
  36. root html;
  37. }
  38. # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  39. #
  40. #location ~ .php$ {
  41. # proxy_pass http://127.0.0.1;
  42. #}
  43. # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  44. #
  45. #location ~ .php$ {
  46. # root html;
  47. # fastcgi_pass 127.0.0.1:9000;
  48. # fastcgi_index index.php;
  49. # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
  50. # include fastcgi_params;
  51. #}
  52. # deny access to .htaccess files, if Apache"s document root
  53. # concurs with nginx"s one
  54. #
  55. #location ~ /.ht {
  56. # deny all;
  57. #}
  58. }
  59. # another virtual host using mix of IP-, name-, and port-based configuration
  60. #
  61. #server {
  62. # listen 8000;
  63. # listen somename:8080;
  64. # server_name somename alias another.alias;
  65. # location / {
  66. # root html;
  67. # index index.html index.htm;
  68. # }
  69. #}
  70. include vhost/*.conf;
  71. # HTTPS server
  72. #
  73. #server {
  74. # listen 443 ssl;
  75. # server_name localhost;
  76. # ssl_certificate cert.pem;
  77. # ssl_certificate_key cert.key;
  78. # ssl_session_cache shared:SSL:1m;
  79. # ssl_session_timeout 5m;
  80. # ssl_ciphers HIGH:!aNULL:!MD5;
  81. # ssl_prefer_server_ciphers on;
  82. # location / {
  83. # root html;
  84. # index index.html index.htm;
  85. # }
  86. #}
  87. }

编辑hosts配置文件:

</>复制代码

  1. vim /etc/hosts

编辑域名配置:

</>复制代码

  1. [root@corwien vhost]# pwd
  2. /usr/local/nginx/conf/vhost
  3. [root@corwien vhost]# vim www.emall.com.conf

</>复制代码

  1. server {
  2. listen 80;
  3. autoindex on;
  4. server_name www.emall.com;
  5. access_log /usr/local/nginx/logs/access.log combined;
  6. index index.html index.htm index.jsp index.php;
  7. # root /product/ftpfile/;
  8. #error_page 404 /404.html;
  9. if ( $query_string ~* ".*[;"<>].*" ){
  10. return 404;
  11. }
  12. location / {
  13. proxy_pass http://127.0.0.1:8080;
  14. add_header Access-Control-Allow-Origin *;
  15. }
  16. }

验证:

(1)先开启Tomcat服务

</>复制代码

  1. # 开启Tomcat服务
  2. /developer/apache-tomcat-7.0.82/bin/startup.sh

(2)使用域名 www.emall.com 访问:

我们可以看到,可以正常访问。

图片文件夹域名配置

创建配置:

</>复制代码

  1. [root@corwien vhost]# pwd
  2. /usr/local/nginx/conf/vhost
  3. [root@corwien vhost]# vim image.emall.com.conf

编辑图片目录域名配置文件

</>复制代码

  1. server {
  2. listen 80;
  3. autoindex off;
  4. server_name image.emall.com;
  5. access_log /usr/local/nginx/logs/access.log combined;
  6. index index.html index.htm index.jsp index.php;
  7. # root /product/ftpfile/;
  8. #error_page 404 /404.html;
  9. if ( $query_string ~* ".*[;"<>].*" ){
  10. return 404;
  11. }
  12. location ~ /(mmall_fe|mmall_admin_fe)/dist/view/* {
  13. deny all;
  14. }
  15. location / {
  16. root /ftpfile/;
  17. add_header Access-Control-Allow-Origin *;
  18. }
  19. }

如果我们使用 image.emall.com/m.jpg 文件,会出现404的问题,因为我们的域名配置文件有误,应该添加后缀名 /usr/local/nginx/conf/vhost/image.emall.com 改为
/usr/local/nginx/conf/vhost/image.emall.com.conf,因为我们在 nginx.conf 配置文件中这样加载的 include vhost/*.conf;

静态资源域名配置

</>复制代码

  1. [root@corwien vhost]# vim s.emall.com.conf

编辑 s.emall.com.conf:

</>复制代码

  1. server {
  2. listen 80;
  3. autoindex off; # 是否自动创建索引,如果开启则会列出下面目录文件的索引
  4. server_name s.emall.com;
  5. access_log /usr/local/nginx/logs/access.log combined;
  6. index index.html index.htm index.jsp index.php;
  7. # root /product/ftpfile/;
  8. #error_page 404 /404.html;
  9. if ( $query_string ~* ".*[;"<>].*" ){
  10. return 404;
  11. }
  12. location ~ /(mmall_fe|mmall_admin_fe)/dist/view/* {
  13. deny all;
  14. }
  15. location / {
  16. root /product/front/;
  17. add_header Access-Control-Allow-Origin *;
  18. }
  19. }

配置之后,需要重启Nginx服务器:

</>复制代码

  1. [root@corwien nginx]# sbin/nginx -s reload
二、MySQL安装 1、安装环境

系统环境:CentOS 6.8 64位
MySQL版本:mysql-server-5.1.73(阿里软件源默认带的版本)

2、MySQL下载

</>复制代码

  1. yum -y install mysql-server

可以通过 rpm -qa | grep mysql-server 此语句来检查是否已经安装mysql-server

mysql 默认配置文件在 /etc/my.cnf

(2)、字符集配置:

</>复制代码

  1. vim /etc/my.cnf

添加配置,在[mysqld]节点下添加:

</>复制代码

  1. default-character-set=utf8
  2. character-set-server=utf8

:wq保存退出

/etc/my.cnf文件:

</>复制代码

  1. [mysqld]
  2. datadir=/var/lib/mysql
  3. socket=/var/lib/mysql/mysql.sock
  4. user=mysql
  5. # Disabling symbolic-links is recommended to prevent assorted security risks
  6. symbolic-links=0
  7. # 设置字符集[20180107]
  8. default-character-set=utf8
  9. [mysqld_safe]
  10. log-error=/var/log/mysqld.log
  11. pid-file=/var/run/mysqld/mysqld.pid

关于中文乱码问题:
在5.1版本,为了解决中文乱码问题,my.ini内[mysql]和[mysqld]中都写:

</>复制代码

  1. default-character-set=utf8

在5.5版本,[mysql]内可以这么写,[mysqld]内不能再这么写了,而是写:

</>复制代码

  1. character-set-server=utf8
3、开机自启动配置

(1)、执行 chkconfig mysqld on
(2)、执行 chkconfig --list mysqld查看(如果2-5位启用on状态即OK)

(3)、启动MySQL

</>复制代码

  1. service mysqld start

(4)、登录mysql
无密码登录

</>复制代码

  1. [root@corwien corwien]# mysql -u root
4、防火墙配置

(1)、vim /etc/sysconfig/iptables
(2)、-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT 将以上配置添加到防火墙配置中
(3)、sudo service iptables restart 执行命令重启防火墙

</>复制代码

  1. -A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
  2. -A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT

5、删除匿名用户

(1)、查看目前MySQL的用户

</>复制代码

  1. select user,host,password from mysql.user

我们可以看到有两个匿名用户,出于安全考虑,我们把匿名用户删掉:

</>复制代码

  1. mysql> delete from mysql.user where user = "";

删除匿名用户,执行以下SQL(安全考虑)
查看是否有匿名用户:select user, host from mysql.user;
删除匿名用户:delete from mysql.user where user="";
刷新、使以上操作生效:flush privileges

6、创建用户

</>复制代码

  1. mysql> insert into mysql.user(Host,User,Password) values("localhost", "emall", password("518666"));
7、修改用户权限

查看所有用户权限:

</>复制代码

  1. mysql> select * from mysql.user G;

G 表示对输出的内容进行格式化

G 格式化之后输出的数据:

我们可以看到,刚才添加的新用户 emall 的权限都为N,所以这里要对这个用户权限做开放:

根据自己实际情况决定是否开放什么权限

语法模板:

</>复制代码

  1. grant all privileges on 库名.表名 to "用户名"@"IP地址" identified by "密码" with grant option;
  2. flush privileges;

</>复制代码

  1. 库名:要远程访问的数据库名称,所有的数据库使用“*”
  2. 表名:要远程访问的数据库下的表的名称,所有的表使用“*”
  3. 用户名:要赋给远程访问权限的用户名称
  4. IP地址:可以远程访问的电脑的IP地址,所有的地址使用“%”
  5. 密码:要赋给远程访问权限的用户对应使用的密码

举例:

</>复制代码

  1. GRANT ALL PRIVILEGES ON *.* TO "root"@"%" IDENTIFIED BY "lxh" WITH GRANT OPTION; # 所有的地址都可以使用root用户,密码为lxh远程访问所有的数据库
  2. flush privileges;
  3. GRANT ALL PRIVILEGES ON testdb.* TO "lxh"@"172.16.52.225" IDENTIFIED BY "lxh" WITH GRANT OPTION; # IP为172.16.52.225的电脑可以使用lxh用户,密码为lxh远程访问数据库testdb的所有表

赋予emall这个用户所有权限:

</>复制代码

  1. mysql> grant all privileges on emall.* to emall@"%" identified by "518666" with grant option;

或者只赋予查增改权限,不让此用户对数据库进行删除操作:

</>复制代码

  1. mysql> grant select,update,create on emall.* to emall@"%" identified by "emall" with grant option;

我们再查看授权是否成功:

</>复制代码

  1. mysql> select * from mysql.user G;

已经授过权了,为什么这里还是N呢?

原因是:select * from mysql.user G;给出的是全局的权限,而不是针对某个DB或者SCHEMA得权限。你赋权语句是grant all privileges on emall.* to "emall"@"%" identified by "518666" with grant option;也就是针对emall这个数据库赋权。那么你自然会得出权限都是‘N’了。

那么,这是不是错误的呢?答案当然不是了。
具体的流程是这样的:假如你有一个SQL的query,比如是select * from emall.table1。mysql会首先去user表中对比你(emall@localhost)是否有select 权限?发现是N.然后,它并不会直接拒绝这个query,而是会继续对照Database级别上检验权限,会db.user="emall" and db.db="emall" and db.host="localhsot",如果检验通过,则通过,否则继续向下检验,host.db="emall" and host.host="localhost",若检验通过,则通过,否则继续向下检验table级别,然后是column级别。

这就是mysql的权限检查模块的工作过程。

并不是你出现了错误,而是mysql的内部机制就是这样的。
建议你仔细看下这篇文章http://tech.it168.com/a2010/0...。这里面对mysql的权限机制做了详细的讲解。

相关文章:
mysql grant 授权不起作用

所以,这里我们给所有库授权,则这里的权限即可为Y:

</>复制代码

  1. mysql> grant all privileges on *.* to emall@"%" identified by "518666" with grant option;

8、修改root密码

</>复制代码

  1. set password for root@localhost=password("yourpassword");
  2. set password for root@127.0.0.1=password("yourpassword");

设置root密码:

</>复制代码

  1. mysql> set password for root@127.0.0.1=password("root");
  2. Query OK, 0 rows affected (0.00 sec)

重新登录:

</>复制代码

  1. mysql -uroot -p
9、创建数据库

查看所有数据库:

</>复制代码

  1. mysql> show databases;

创建数据库:

</>复制代码

  1. mysql> create database `emall` default character set utf8 collate utf8_general_ci;
10、忘记root密码解决方法

密码太多记不住??你是否忘记了MySQL的root密码? 通过以下4步就可重新设置新密码:

停止 mysql server

</>复制代码

  1. service mysqld stop

2.打开终端,输入:

找到mysql安装目录:

</>复制代码

  1. [root@corwien download]# whereis mysql
  2. mysql: /usr/bin/mysql /usr/lib64/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz

</>复制代码

  1. [root@corwien download]# /usr/bin/mysqld_safe --skip-grant-tables

3.打开另一个新终端,输入:

</>复制代码

  1. [root@corwien corwien]# /usr/bin/mysql -u root
  2. mysql> UPDATE mysql.user SET authentication_string=PASSWORD("root") WHERE User="root";
  3. ERROR 1054 (42S22): Unknown column "authentication_string" in "field list"
  4. mysql> UPDATE mysql.user SET password=PASSWORD("root") WHERE User="root";
  5. Query OK, 2 rows affected (0.00 sec)
  6. Rows matched: 3 Changed: 2 Warnings: 0
  7. mysql> FLUSH PRIVILEGES;
  8. Query OK, 0 rows affected (0.00 sec)
  9. mysql> exit;
  10. Bye

4.然后重启mysql,重新登录:

</>复制代码

  1. [root@corwien corwien]# service mysqld start
  2. [root@corwien corwien]# mysql -uroot -p
  3. Enter password:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/68130.html

相关文章

  • Java 实战开发NginxMysql环境安装

    摘要:你赋权语句是也就是针对这个数据库赋权。这就是的权限检查模块的工作过程。并不是你出现了错误,而是的内部机制就是这样的。这里面对的权限机制做了详细的讲解。 本节会安装Nginx,Mysql. 一、Nginx反向代理服务器 1、Nginx简介 Nginx是一款轻量级Web服务器、也是一款反向代理服务器. 作用:(1)、可以直接支持Rails和PHP的程序(2)、可作为HTTP反向代理服务器(...

    shusen 评论0 收藏0
  • 写这么多系列博客,怪不得找不到女朋友

    摘要:前提好几周没更新博客了,对不断支持我博客的童鞋们说声抱歉了。熟悉我的人都知道我写博客的时间比较早,而且坚持的时间也比较久,一直到现在也是一直保持着更新状态。 showImg(https://segmentfault.com/img/remote/1460000014076586?w=1920&h=1080); 前提 好几周没更新博客了,对不断支持我博客的童鞋们说声:抱歉了!。自己这段时...

    JerryWangSAP 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<